JSF テンプレートと複合コンポーネントの適切な使用法についてはまだよくわかりません。多くのページを持つエンタープライズ Web アプリケーションを作成する必要があります。すべてのページには、同じヘッダー、メニュー、フッター、そしてもちろん異なるコンテンツ (= JSF テンプレート) があります。すべてのページのコンテンツは、再利用可能な「ボックス」(= JSF 複合コンポーネント) で構成されます。ボックスは、いくつかのフィールド、ボタンなどで構成されています。私のソリューションは適切ですか? または、カスタム コンポーネント、装飾などの他のテクノロジを使用する必要がありますか?
レイアウト.xhtml
<h:body>
<ui:insert name="main_menu">
<ui:include src="/xhtml/template/main_menu.xhtml"/>
</ui:insert>
<ui:insert name="header">
<ui:include src="/xhtml/template/header.xhtml"/>
</ui:insert>
<ui:insert name="content"/>
<ui:insert name="footer">
<ui:include src="/xhtml/template/footer.xhtml"/>
</ui:insert>
</h:body>
customer_overview.xhtml:
<html xmlns:cc="http://java.sun.com/jsf/composite/composite_component">
<h:body>
<!-- Facelet template -->
<ui:composition template="/xhtml/template/layout.xhtml">
<ui:define name="content">
<!-- Composite Components -->
<cc:component_case_history
caseList="#{customerOverviewController.cases}"
/>
<cc:component_customer
....
/>
...
</ui:define>
</ui:composition>
</h:body>
component_case_history.xhtml
<html xmlns:composite="http://java.sun.com/jsf/composite">
<composite:interface>
<composite:attribute name="cases" type="java.util.List"/>
</composite:interface>
<composite:implementation>
<!-- using of "cases" -->
...
</composite:implementation>
CustomerOverviewController.java
@ManagedBean
@ViewScoped
public class CustomerOverviewController {
public List<Case> getCases() {
...
}
}
編集 2012-04-27
根拠: <ui:include>、タグ ファイル、複合コンポーネント、および/またはカスタム コンポーネントをいつ使用するか?
Facelet テンプレート + Composite コンポーネントではなく、むしろ Facelet テンプレート + Facelet タグ ファイルを使用する必要があると思います。