私は JSF を初めて使用し、含まれているページを動的にレンダリングすることに苦労しています。私のコードは次のようになります。
MenuBean
@ViewScoped
public class MenuBean implements Serializable {
private MenuItem[] menuItems = new MenuItem[] {
new MenuItem("page_1", "/page_1.xhtml"),
new MenuItem("page_2", "/page_2.xhtml"),
};
private String selectedItemLabel;
//...
}
メニュー項目
public class MenuItem implements Serializable {
private String label;
private String page;
//...
}
index.xhtml
<ui:repeat var="menuItem" value="#{menuBean.menuItems}">
<h:panelGroup rendered="#{menuBean.selectedItemLabel eq menuItem.label}" layout="block">
<h:outputText value="#{menuBean.selectedItemLabel}" />
<ui:include src="#{menuItem.page}" />
</h:panelGroup>
</ui:repeat>
その結果、2 つのボタンがレンダリングされます。ボタンをクリックすると、条件付きでレンダリングされた panelGroup 内のラベルが表示されますが、含まれているページは表示されません。「menuItem1」変数を最初の ui:repeat から変更すると機能しますが、実際には予測できません。たとえば、setSelectedItemLabel パラメータを「page_1」にハードコードすると、button_1 をクリックすると page_1 が表示されますが、button_2 をクリックしても page_2 (!?) が表示されます...