コマンドリンクとボタンによる部分ページ更新の実装
最も広く使用されている Ajax 動作の 1 つに部分ページ更新があります。ページ全体を再読み込みするのではなく、ユーザの何らかのアクションに従って特定の部分のページのみを更新する動作です。
部分ページ更新を実装する最も単純な方法は、更新する必要のあるコンポーネントを識別するために、<apex:commandLink> または <apex:commandButton> タグで reRender 属性を使用する方法です。ユーザがボタンまたはリンクをクリックすると、識別されたコンポーネントとそのすべての子コンポーネントのみが更新されます。
たとえば、「単一ページでのクエリ文字列パラメータの取得と設定」で説明されている取引先責任者リストの例を考えてください。この例では、ユーザがリストの取引先責任者の名前をクリックしてその詳細を表示すると、このアクションの結果としてページ全体が更新されます。そのマークアップに 2 つの変更を適用することによって、リストの下の領域のみが更新されるようにページの動作を変更できます。
- まず、再表示するページの部分を作成または特定します。これを行うには、<apex:detail> タグを <apex:outputPanel> タグでラップし、出力パネルに id パラメータを指定します。id の値は、この領域を参照する名前で、ページのあらゆる場所で使用できます。この値は、ページ内で一意である必要があります。
- 次に、定義した領域の部分ページ更新を実行するために使用する、呼び出しポイント (コマンドリンク) を示します。これを行うには、<apex:commandLink> タグに reRender 属性を追加し、出力パネルの id に割り当てられた値と同じ値をその属性に指定します。
最終的なマークアップは次のようになります。
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 Click 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:commandLink rerender="detail">
28 {!contact.Name}
29 <apex:param name="cid" value="{!contact.id}"/>
30 </apex:commandLink>
31 </apex:column>
32 </apex:dataTable>
33 </apex:form>
34 </apex:pageBlock>
35 <apex:outputPanel id="detail">
36 <apex:detail subject="{!$CurrentPage.parameters.cid}" relatedList="false"
37 title="false"/>
38 </apex:outputPanel>
39</apex:page>ページを保存���たら、任意の取引先責任者をクリックし、ページ全体を更新しなくても詳細コンポーネントが表示されることを確認します。