Skip to main content link. Accesskey S
  • Log In
  • Help
  • IBM Logo
  • IBM Notes and Domino Application Development wiki
  • All Wikis
  • All Forums
  • Home
  • Product Documentation
  • Community Articles
  • Learning Center
  • IBM Redbooks
  • API Documentation
Search
Community Articles > 日本語 - Japanese > XPages における JSF ライフサイクル - コントロールプロパティ評価のタイミング
  • New Article
  • Share Show Menu▼
  • Subscribe Show Menu▼

About the Original Author

Click to view profileIBM contributorTatsuya Sobue
Contribution Summary:
  • Articles authored: 14
  • Articles edited: 1
  • Comments Posted: 0

Recent articles by this author

XPages アプリケーションで生成される一時ファイル

XPages アプリケーション実行時には、さまざまな一時ファイルが一時ディレクトリに生成されます。 その内容を解説します。

XPages データソース解説 - URL パラメータ

XPages のデータソースとページをアクセスする際の URL パラメータとの関係について解説します。

XPages データソース解説 - スコープ

XPages のデータソースのスコープについて解説します。

XPages データソース解説 - 定義方法

XPages のデータソースの定義方法について解説します。

XPages データソース解説 - 種類

XPages のデータソースの種類について解説します。
Community articleXPages における JSF ライフサイクル - コントロールプロパティ評価のタイミング
Added by IBM contributorTatsuya Sobue | Edited by IBM contributorHiroaki Komine on May 6, 2013 | Version 28
  • Edit
  • More Actions Show Menu▼
Rate this article 1 starsRate this article 2 starsRate this article 3 starsRate this article 4 starsRate this article 5 stars
expanded Abstract
collapsed Abstract
XPages のコントロールのプロパティが評価されるタイミングを、JSF のライフサイクルと関連付けてまとめます。
Tags: XPages, JSF, イベント, プロパティ, ライフサイクル
ShowTable of Contents
HideTable of Contents
  • 1 入力系コントロールの場合
  • 2 繰り返しコントロールの場合
  • 3 まとめ

一つ前の記事では、XPages における JSF のライフサイクルと、XPage やカスタムコントロールのページイベントとの関係をまとめました。

XPages における JSF ライフサイクル - ページイベント処理のタイミング


この記事では、コントロールがサポートするさまざまなプロパティがライフサイクル中でいつ評価されるのか
(JavaScript ロジックが割り振られていた場合には、そのロジックが実行される)、イベントがいつ実行されるのかをまとめます。

処理順序に依存関係のある JavaScript ロジックを XPage 中のあちこちに分散して配置するような場合や、
パフォーマンスを考慮する場合には、このような実行順序を理解しておくことは有用です。

入力系コントロールの場合


次の簡単なXPageを使って評価タイミングを見ていきます。



パネルが2つ配置され、1つめのパネル内に、計算結果フィールドとコンボボックスが配置されています。
タイミングを確認するのは、次のプロパティとイベント(太字)です。


  • XPage
    beforePageLoad/afterPageLoad/afterRestoreView/beforeRenderResponse/afterRenderResponse
  • 計算結果フィールド
    rendered/value
  • コンボボックス
    rendered/readonly/selectItems.value/onchange

注:
value はコントロールにバインドする値を指定するプロパティです。
rendered はコントロールを表示するかどうかを指定するプロパティです。
readonlyはコントロールを入力可能か表示専用で表示するかを指定するプロパティです。
selectItems.valueはコンボボックスでリストされ選択可能な項目を指定するプロパティです。
コンボボックス自身のプロパティではなく、その子要素である selectItems の value プロパティとして指定します。


  • ケース1:新規ページアクセスの場合
    評価順序1
RenderResponse フェーズで、コントロールの各種プロパティが評価されていることが分かります。
コンポーネントツリーの処理上、プロパティの評価は1回のリクエストに対して必ずしも1回ではない点に注意してください。
このケースでは、コンボボックスのプロパティがそれぞれ2回ずつ評価されています。
  • ケース2:コンボボックスで選択を行った場合 (ページ全体を更新)
    評価順序2
このケースでは、計算結果フィールドとコンボボックスが部分更新の対象となっているため、Render Response フェーズでの評価は、
ケース1の場合と同様です。
加えて、Apply Request Values/Process Validation/Update Model Values の各フェーズにおいても、
rendered 等のプロパティが評価されています。

onchange イベントは、Invoke Application フェーズで実行されています。
  • ケース3:コンボボックスで選択を行った場合 (パネル2を部分更新する場合)
    評価順序3
このケースでは、計算結果フィールドとコンボボックスが部分更新の対象となっていないため、
Render Response フェーズでのプロパティの評価が行われなくなっています。
それ以外は、ケース2の場合と同様です。

Apply Request Values/Process Validation/Update Model Values の各フェーズにおいては、
部分更新の対象になっていなくても、プロパティの評価が行われていることに注意してください。
  • ケース4:新規ページアクセスの場合 (「ページの読み込み時に計算」を設定)
    評価順序4
プロパティなどに割り振られた JavaScript には、そのロジックをいつ実行するかを指定するオプションがあります。



デフォルトでは「動的に計算」が選択されているのですが、これを「ページの読み込み時に計算」に変更した場合の動作です。
このオプションを選択すると、ケース1と比べて、プロパティの評価が Render Response フェーズから、Restore View フェーズに
移動していることがわかります。
  • ケース5:コンボボックスで選択を行った場合 (ページ全体を更新、「ページの読み込み時に計算」を設定)
    評価順序5
プロパティの評価は、新規ページロード時の Restore View フェーズで行ってしまっているので、このケースでは、
一切の評価が行われていません。onchange イベントの処理が行われているだけです。

このように、「ページの読み込み時に計算」オプションを指定することで、プロパティの評価回数を最低限にすることが出来ます。
但し、onchange などのイベント処理により評価値を変更することが出来ません。
そのため、値がページ読み込み時に確定してしまうことが分かっているプロパティにのみ使用してください。

繰り返しコントロールの場合


パネル1の中に、繰り返しコントロールを配置し、さらにその中にコンボボックスを配置しています。
繰り返しは2回行うように設定してあります。



タイミングを確認するのは、次のプロパティとイベント(太字)です。


  • XPage
    beforePageLoad/afterPageLoad/afterRestoreView/beforeRenderResponse/afterRenderResponse
  • 繰り返しコントロール
    rendered/value
  • コンボボックス
    rendered/readonly/selectItems.value/onchange
  • ケース6:新規ページアクセスの場合
    評価順序6
ケース1とほとんど同じです。RenderResponse フェーズで、コントロールの各種プロパティが評価されていることが分かります。
コンボボックスが繰り返しコントロールの中に配置され2回繰り返されるため、コンボボックスのプロパティ評価が2倍になっています。
  • ケース7:コンボボックスで選択を行った場合 (ページ全体を更新)
    評価順序7
ケース2に対応するケースですが、いくつかの相違点が見られます。
繰り返しコントロールの value プロパティは、Render Response フェーズだけではなく、Apply Request Values フェーズでも評価されるため、
都合2回の評価となります。
この点は要注意です。繰り返しコントロールの value プロパティでは繰り返されるデータを用意するため、場合により、時間のかかる重たい
ロジックを割り当てることがあり得ます。このケースから分かるように、重たい処理が2回実行されることになると、パフォーマンスに影響が出ます。

コンボボックスが繰り返しコントロール内に配置されたことで、Apply Request Values/Process Validation/Update Model Values の
各フェーズにおけるrendered の評価回数が2回から3回に変化しています。
  • ケース8:コンボボックスで選択を行った場合 (パネル2を部分更新する場合)
    評価順序8
ケース3の場合同様、ケース7に対して、Render Response フェーズでのプロパティの評価が行われなくなっています。

まとめ


以上、さまざまなバリエーションで、コントロールのプロパティ評価やイベントの処理がどのタイミングで行われるのかを見てきました。
その中から、特に重要なポイントをまとめておきます。
  • プロパティ評価のタイミングと順序

  • さまざまなオプションにより、プロパティ評価のタイミングや順序が変化します。実行順序に依存関係のある JavaScript を分散して配置する場合、
    自分が設定しているオプションの場合に、何がいつどの順で実行されるかを正しく理解していないと、不可解な予期せぬ問題に遭遇することになります。
  • プロパティ評価の回数

  • プロパティ評価は、1回のリクエストに対して1回とは限りません。さまざまな条件により大きく変化します。そのため、プロパティに割り当てられた
    JavaScript の中で、サイドエフェクトのあるようなロジックを実行することは厳禁です。例えば、rendered に割り当てられた JavaScript の中で、
    何回ページの呼び出しが行われたかを数える目的で sessionScope.accessCnt++ のようなロジックを実行すると、期待する以上の回数を
    数えてしまうことになります。

    また、時間のかかる重い処理を実行することも避けることが望ましいです。例えば、あるコントロールを表示するかどうかを判断するために、
    Domino 以外の外部システムにリモートで問い合わせる必要があり、その処理に秒単位の時間がかかるとします。そのような問い合わせロジックを、
    対象のコントロールの rendered に直接割り当ててしますと、部分更新の際などに何度も実行されてしまい 10秒単位の処理時間が
    かかってしまうことになります。
    このような場合には、ページアクセスごとに1回しか実行されないことが保障されているbeforePageLoad/afterPageLoad/afterRestoreView などの
    タイミングで実行し、結果をスコープ変数などに保存した上で、rendered ではその値を参照するだけにするなどの工夫を行います。
  • 部分更新の際のプロパティ評価

  • 部分更新を指定することにより、評価をする/しないが変化するのは Render Response フェーズのみです。
    Apply Request Values/Process Validation/Update Model Values におけるプロパティの評価は、部分更新の対象であるかどうかとは無関係であり、
    評価は行われます。

注:
プロパティの評価のタイミングは、プロパティが何かによりそれぞれ異なります。
ここでまとめられている情報は、対象となっているプロパティに対してのみ有効です。

また、Domino のバージョンにより、タイミングが異なる場合もあり得ます。
ここでまとめられている情報は Domino 8.5.2 に基づく情報です。


  • Edit
  • More Actions Show Menu▼


expanded Attachments (8)
collapsed Attachments (8)
Edit the article to add or modify attachments.
File TypeSizeFile NameCreated OnDelete file
image/x-png 6 KB list1.png 11/9/11, 11:35 PM
image/x-png 8 KB list2.png 11/9/11, 11:43 PM
image/x-png 6 KB list3.png 11/10/11, 2:17 AM
image/x-png 5 KB list4.png 11/10/11, 2:52 AM
image/x-png 4 KB list5.png 11/10/11, 2:53 AM
image/x-png 7 KB list6.png 11/10/11, 4:21 AM
image/x-png 12 KB list7.png 11/10/11, 4:24 AM
image/x-png 9 KB list8.png 11/10/11, 4:24 AM
expanded Versions (28)
collapsed Versions (28)
Version Comparison     
VersionDateChanged by              Summary of changes
This version (28)May 6, 2013, 9:10:05 PMHiroaki Komine  IBM contributor
27May 6, 2013, 9:09:07 PMHiroaki Komine  IBM contributor
26Nov 15, 2011, 9:28:10 PMTatsuya Sobue  IBM contributorMinor Change
25Nov 15, 2011, 8:40:32 PMTatsuya Sobue  IBM contributorMinor Change
24Nov 10, 2011, 4:48:44 AMTatsuya Sobue  IBM contributor
22Nov 10, 2011, 4:46:03 AMTatsuya Sobue  IBM contributor
21Nov 10, 2011, 4:44:28 AMTatsuya Sobue  IBM contributor
20Nov 10, 2011, 4:42:45 AMTatsuya Sobue  IBM contributor
19Nov 10, 2011, 4:31:04 AMTatsuya Sobue  IBM contributor
18Nov 10, 2011, 4:29:11 AMTatsuya Sobue  IBM contributor
17Nov 10, 2011, 4:26:30 AMTatsuya Sobue  IBM contributor
16Nov 10, 2011, 4:25:22 AMTatsuya Sobue  IBM contributor
15Nov 10, 2011, 3:36:37 AMTatsuya Sobue  IBM contributor
14Nov 10, 2011, 3:10:04 AMTatsuya Sobue  IBM contributor
13Nov 10, 2011, 3:07:18 AMTatsuya Sobue  IBM contributor
12Nov 10, 2011, 3:06:32 AMTatsuya Sobue  IBM contributor
11Nov 10, 2011, 2:42:06 AMTatsuya Sobue  IBM contributor
10Nov 10, 2011, 2:41:20 AMTatsuya Sobue  IBM contributor
9Nov 10, 2011, 2:40:16 AMTatsuya Sobue  IBM contributor
8Nov 10, 2011, 2:37:19 AMTatsuya Sobue  IBM contributor
7Nov 10, 2011, 2:35:24 AMTatsuya Sobue  IBM contributor
6Nov 10, 2011, 2:19:36 AMTatsuya Sobue  IBM contributor
5Nov 10, 2011, 12:33:00 AMTatsuya Sobue  IBM contributor
4Nov 10, 2011, 12:26:33 AMTatsuya Sobue  IBM contributor
3Nov 10, 2011, 12:25:54 AMTatsuya Sobue  IBM contributor
2Nov 10, 2011, 12:25:43 AMTatsuya Sobue  IBM contributor
1Nov 10, 2011, 12:24:27 AMTatsuya Sobue  IBM contributor
1Nov 10, 2011, 12:17:54 AMTatsuya Sobue  IBM contributor
expanded Comments (0)
collapsed Comments (0)
Copy and paste this wiki markup to link to this article from another article in this wiki.
Go ElsewhereStay ConnectedHelpAbout
  • IBM Collaboration Solutions wikis
  • IBM developerWorks
  • IBM Software support
  • Twitter LinkIBMSocialBizUX on Twitter
  • FacebookIBMSocialBizUX on Facebook
  • ForumsLotus product forums
  • BlogsIBM Social Business UX blog
  • Community LinkThe Social Lounge
  • Wiki Help
  • Forgot user name/password
  • Wiki design feedback
  • Content feedback
  • About the wiki
  • About IBM
  • Privacy
  • Accessibility
  • IBM Terms of use
  • Wiki terms of use