<apex:composition> を使用したテンプレートの定義
<apex:composition> を使用して定義したすべてのテンプレートには、1 つ以上の子の <apex:insert> タグが必要です。<apex:insert> タグは、そのテンプレートをインポートするページに対し、そのセクションで定義が必要であることを示します。<apex:composition> を使用してテンプレートをインポートする Visualforce ページでは、<apex:define> を使用してテンプレートの各 <apex:insert> セクションのコンテンツを指定する必要があります。
スケルトンテンプレートを作成すると、それ以降の Visualforce ページが同じ標準構造内で異なるコンテンツを実装できます。そのためには、<apex:composition> タグを使用してテンプレートページを作成します。
次の例は、<apex:composition>、<apex:insert>、および <apex:define> を使用してスケルトンテンプレートを実装する方法を示します。
最初に、compositionExample というコントローラを使用する myFormComposition という空のページを作成します。
ページを保存すると、compositionExample の作成を要求するメッセージが表示されます。次のコードを使用して、そのカスタムコントローラを定義します。
次に、myFormComposition に戻り、スケルトンテンプレートを作成します。
2 つの <apex:insert> 項目が age と meal のコンテンツを必要としています。これらの項目のマークアップは、この構成テンプレートをコールするすべてのページに定義されます。
次に、myFullForm というページを作成し、そこで myFormComposition に <apex:insert> タグを定義します。
このマークアップでは、次の点に留意してください。
- myFullForm を保存すると、前に定義した <apex:inputText> タグと [保存] ボタンが表示されます。
- 構成ページには age 項目および meal 項目が必要であるため、myFullForm はこれらをテキスト入力項目として定義します。項目がページに表示されている順序は重要ではありません。myFormComposition は age 項目が常に meal 項目よりも前に表示されるように指定します。
- 一致する <apex:define> 項目がない場合でも、name 項目はインポートされます。
- 項目のコントローラコードが存在する場合でも、color 項目は無視されます。これは、構成テンプレートが color という名前の項目を必要としないためです。
- age および meal 項目は、テキスト入力である必要はありません。<apex:define> タグ内のコンポーネントは、任意の有効な Visualforce タグにすることができます。
<apex:define> タグで有効な Visualforce を使用する方法の例として、myAgelessForm という新規 Visualforce ページを作成して次のマークアップを使用します。
構成テンプレートで必要なのは、<apex:define> タグが存在することだけです。この例では、age がテキストして定義されています。