任意のコンポーネントでのイベントへの Ajax 動作の適用
ページの部分更新を実装するためにコマンドリンクやボタンを使用することは比較的単純ですが、マウスポインタを取引先責任者の名前に重ねたときに同様のページ更新が行われると、さらに便利です。
取引先責任者リストの例を使ってこれを実装するには、データテーブルから <apex:commandLink> タグを取り除き、代わりに <apex:outputPanel> タグで取引先責任者の名前をラップします。この出力パネル内に、取引先責任者の名前の同階層として <apex:actionSupport> 要素を追加します。
- <apex:outputPanel> タグは、特化した動作を実行する領域を定義します。
-
<apex:actionSupport> タグは、コマンドリンクによって以前に実装した部分ページ更新動作を定義します。
- event 属性は、更新をトリガする DOM イベントを指定します。<apex:commandLink> は「onclick」イベント中にのみ実行しますが、<apex:actionSupport> は「onclick」、「ondblclick」、またはこの例では「onmouseover」など、すべての有効なイベントで実行できます。
- reRender 属性は、ページのどの部分を更新するのかを指定します。
- <apex:param> タグは、指定されたイベントが発生したときに、cid クエリ文字列パラメータの値を設定します。
この結果作成されるマークアップは次のようになります。
1swfobject.registerObject("clippy.codeblock-0", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<apex:page standardController="Account">
18 <apex:pageBlock title="Hello {!$User.FirstName}!">
19 You are displaying contacts from the {!account.name} account.
20 Mouse over a contact's name to view his or her details.
21 </apex:pageBlock>
22 <apex:pageBlock title="Contacts">
23 <apex:form>
24 <apex:dataTable value="{!account.Contacts}" var="contact" cellPadding="4"
25 border="1">
26 <apex:column>
27 <apex:outputPanel>
28 <apex:actionSupport event="onmouseover" rerender="detail">
29 <apex:param name="cid" value="{!contact.id}"/>
30 </apex:actionSupport>
31 {!contact.Name}
32 </apex:outputPanel>
33 </apex:column>
34 </apex:dataTable>
35 </apex:form>
36 </apex:pageBlock>
37 <apex:outputPanel id="detail">
38 <apex:actionStatus startText="Requesting...">
39 <apex:facet name="stop">
40 <apex:detail subject="{!$CurrentPage.parameters.cid}" relatedList="false"
41 title="false"/>
42 </apex:facet>
43 </apex:actionStatus>
44 </apex:outputPanel>
45</apex:page>ページを保存したら、任意の取引先責任者にマウスポインタを移動し、クリックしなくても詳細領域が適切な情報で更新されることを確認します。