我是一名新手JSF开发者,正在研究动态渲染包含的页面。我的代码如下:
菜单Bean
@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个按钮。每当我点击任何一个按钮时,条件性渲染的面板组内的标签出现,但包含的页面却没有显示。如果我从第一个ui:repeat中更改'menuItem1'变量,则可以正常工作,但这真的很不可预测。例如,如果我将setSelectedItemLabel参数硬编码为'page_1',那么当我点击button_1时,page_1会显示,但是即使我点击button_2,page_2(!?)也会显示...