我是初学者。
我正在使用Primefaces做一个项目。
触发p:menuitem
时,我需要动态包含多个页面。
我已经尝试过但单击p:menuitem
时动态页面未正确包含,并且该页面仅在刷新页面(浏览器)时显示。
示例代码
<p:menu>
<p:menuitem action="..." value="Page1"/>
<p:menuitem action="..." value="Page2"/>
<p:menuitem action="..." value="Page3"/>
</p:menu>
<p:outputPanel>
<ui:include src="#{Pages.dynamicaPagesInclude}"/>
</p:outputPanel>
我不知道我错在哪里。
任何想法?
答案 0 :(得分:1)
请试试这个:
index.xhtml :此文件是“主”页面,该页面包含用于选择要加载的动态页面的菜单。
当您按下menuItem时,page
属性将设置为所选页面值。然后,ajax请求调用changePage
方法,该方法负责将页面设置为加载。我们对menuItem说我们需要update
包含新页面加载的outputPanel以在浏览器上显示它。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Test Prime</title>
</h:head>
<h:body>
<h:form id="formulario">
<p:menu>
<p:menuitem value="Page1" actionListener="#{pages.changePage(1)}" update="outputPanel "/>
<p:menuitem value="Page2" actionListener="#{pages.changePage(2)}" update="outputPanel"/>
</p:menu>
<p:outputPanel id="outputPanel">
<ui:include src="#{pages.dynamicaPagesInclude}" />
</p:outputPanel>
</h:form>
</h:body>
</html>
page1.xhtml :代表新网页的虚拟页面。
<ui:composition
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">
<h2>PAGE 1</h2>
</ui:composition>
page2.xhtml :虚拟页面,代表不同的页面。
<ui:composition
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">
<h2>PAGE 2</h2>
</ui:composition>
Pages.java :此java类是用于控制视图的ManagedBean。它包含一个名为dynamicaPagesInclude
的字符串字段,其中包含要加载的页面的路径。
方法changePage
获取由menuitem设置的属性page
。根据其价值,选择一个页面或其他。
import javax.faces.bean.ManagedBean;
import javax.faces.event.ActionEvent;
@ManagedBean
public class Pages {
private String dynamicaPagesInclude;
public String getDynamicaPagesInclude() {
return dynamicaPagesInclude;
}
public void setDynamicaPagesInclude(String dynamicaPagesInclude) {
this.dynamicaPagesInclude = dynamicaPagesInclude;
}
public void changePage(int itemSelected ) {
if (itemSelected == 1) {
dynamicaPagesInclude = "page1.xhtml";
} else {
dynamicaPagesInclude = "page2.xhtml";
}
}
}
对不起我的英语水平。