動的コンポーネントの遅延作成
デフォルトでは、動的コンポーネントを定義する Apex メソッドは、ページに定義された action メソッドが実行される前に、ページの読み込み時に実行されます。ページアクションが完了するまで待ってから、動的コンポーネントを作成するメソッドを実行するには、動的コンポーネントの invokeAfterAction 属性を true に設定します。これにより、たとえば、ページ初期化アクションまたはコールアウトの結果に応じて変化する動的コンポーネントを設計できます。
次に、動的コンポーネントを 1 つ含むページを次に示します。この動的コンポーネントは、ページの action メソッド pageActionUpdateMessage が完了した後に作成されます。
次に、動的コンポーネント定義を提供する関連付けられたコントローラ、および invokeAfterAction 属性の影響を示します。
動的コンポーネントのデフォルトの動作では、コンストラクタで設定されている msgText 値は動的コンポーネントによって表示されます。動的コンポーネントに invokeAfterAction="true" を設定にすることにより、この動作が変更されます。このページは pageActionUpdateMethod が完了するまで待ち、その後で動的コンポーネントを作成します。したがって、コンポーネントには、代わりに pageActionUpdateMessage アクションメソッドで設定されている msgText の値が表示されます。
動的コンポーネントおよびその他のアクションの遅延作成
invokeAfterAction="true" は、ページアクションの実行時であるページ読み込みの直後に動的コンポーネントに作用します。invokeAfterAction="true" を設定すると、ページ上のコンポーネント作成およびすべての action メソッドの順序が逆になります。つまり、次のすべてのコンポーネントに対する action メソッドの実行順序が変更されます。
- <apex:actionFunction>
- <apex:actionPoller>
- <apex:actionSupport>
- <apex:commandButton>
- <apex:commandLink>
- <apex:page>
- <apex:togglePanel>
動的コンポーネントに対して invokeAfterAction="false" が設定されている場合、実行順序は次のようになります。これは、動的コンポーネントのデフォルトの動作です。
- 動的コンポーネントの作成メソッドを呼び出し、コンポーネントが構成されます。
- action メソッドを呼び出します。
- ページを再表示します。
動的コンポーネントに対して invokeAfterAction="true" が設定されている場合、実行順序は次のようになります。
- action メソッドを呼び出します。
- 動的コンポーネントの作成メソッドを呼び出し、コンポーネントが構成されます。
- ページを再表示します。