我正在尝试动态加载基于p:布局中所选操作的页面-我的操作由托管bean驱动-使用下面的代码,我看到托管bean被调用,正确的页面被传递,但没有被呈现。想知道我错过了什么,希望有人能指出来。
感谢布局页面 <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<f:view contentType="text/html" locale="en">
<h:head title="Title">
<ui:insert name="head" />
</h:head>
<h:body>
<p:layout fullPage="true">
<p:layoutUnit position="north" size="100" header="Top"
resizable="true" closable="true" collapsible="true">
</p:layoutUnit>
<p:layoutUnit position="south" size="100" header="Bottom"
resizable="true" closable="true" collapsible="true">
</p:layoutUnit>
<p:layoutUnit position="west" size="200" style="width:200px"
header="Menu" resizable="true" closable="true" collapsible="true">
<h:form id="formMainMenu">
<p:panelMenu style="width:400px">
<p:submenu label="Sub Menu 1">
<p:submenu label="Sub Menu 2" icon="ui-icon-extlink">
<p:menuitem value="Option1"
actionListener="#{menuController.setPage('../../public/pages/aboutTest.xhtml')}"
update=":allLayoutForm:allLayout" />
</p:submenu>
</p:submenu>
</p:panelMenu>
</h:form>
</p:layoutUnit>
<p:layoutUnit position="east" size="200" header="Right"
resizable="true" closable="true" collapsible="true" effect="fade">
</p:layoutUnit>
<h:form id="allLayoutForm">
<p:layoutUnit position="center" id="allLayout">
<ui:insert name="content">src="#{menuController.page}"</ui:insert>
</p:layoutUnit>
</h:form>
</p:layout>
</h:body>
</f:view>
</html>
菜单控制器@SuppressWarnings("unused")
@ManagedBean
@ViewScoped
public class MenuController {
private String page;
public String getPage() {
System.out.println(" Get "+page);
return page;
}
public void setPage(String page) {
System.out.println(page);
this.page = page;
}
}
如果您需要在应用程序中到处使用html页面的一些静态部分,您应该查看一下JSF模板(这里的示例)。
MainTemplate.xhtml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<html xmlns="http://www.w3c.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title><ui:insert name="title">Default title</ui:insert></title>
</h:head>
<h:body>
<h:form id="menuForm">
<p:menubar model="#{bean.menumodel}" />
</h:form>
<ui:insert name="content" />
</h:body>
</html>
你的整个页面看起来像这样:
<ui:composition xmlns="http://www.w3c.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:cc="http://java.sun.com/jsf/composite"
template="/templates/MainTemplate.xhtml">
<ui:define name="title">Title Page</ui:define>
<ui:define name="content">
/* your jsf code */
</ui:define>
</ui:composition>
使用这个示例,您可以轻松更改页面的内容和标题