如何使用ui动态包含多个页面:include Primefaces?

时间:2015-06-17 01:30:05

标签: primefaces facelets

我是初学者。

我正在使用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>

我不知道我错在哪里。

任何想法?

1 个答案:

答案 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";
        }
    }
}

对不起我的英语水平。