0

我在使用 JSF 测试应用程序和 PrimeFaces 组件时遇到问题,并且找不到错误。

我从一个由以下定义的模板文件 (layoutTempl.xhtml) 开始:

....
<h:body>
    <p:layout fullPage="true" >
        <p:layoutUnit position="north" size="95" >
            <ui:insert name="menubar" >
                MenuBar
            </ui:insert>          
        </p:layoutUnit>          
        <p:layoutUnit position="west" resizable="false" size="250">
            <ui:insert name="tree" >
                ProjectTree
            </ui:insert>             
        </p:layoutUnit>
        <p:layoutUnit position="center">
            <ui:insert name="main" >
                MainContent
            </ui:insert>           
        </p:layoutUnit>
        <p:layoutUnit position="south" size="45">
            <ui:insert name="footer" >
                Footer
            </ui:insert> 
        </p:layoutUnit>
    </p:layout>       
</h:body>
....

此模板用于两个页面 (indexContent.xhtml):

....
<body>
    <ui:composition template="./layoutTempl.xhtml">
        <ui:define name="menubar">
            MenuBar
        </ui:define>
        <ui:define name="tree">
            Project Tree
        </ui:define>
        <ui:define name="main">
            <ui:include src="index.xhtml"/>
        </ui:define>
        <ui:define name="footer">
            Footer
        </ui:define>
    </ui:composition>
</body>
....

和(abcContent.xhtml):

....
<body>
    <ui:composition template="./layoutTempl.xhtml">
        <ui:define name="menubar">
            MenuBar
        </ui:define>
        <ui:define name="tree">
            Project Tree
        </ui:define>
        <ui:define name="main">
            <ui:include src="abc.xhtml"/>
        </ui:define>
        <ui:define name="footer">
            Footer
        </ui:define>
    </ui:composition>       
</body>
....

包含的文件 index.xhtml 包含:

....
<h:body>
    <ui:composition >
    Hello from BareTest
    <br /><br />
    <h:form id="myform">
        <p:selectOneMenu id="scroll2"
                         value="#{listTestBean.selectedMyObject}" >
            <f:selectItems value="#{listTestBean.myObjects}"/>
            <p:ajax event="change" listener="#{listTestBean.valueChanged}"/>
        </p:selectOneMenu>
        <br/><br/>
    </h:form>
    </ui:composition>
</h:body>
....

而 abc.xhtml 包含:

....
<h:body>
    <h2>We got at abc page!</h2>
    <br /><br />
    <h:form id="abcForm">
        <p>#{listTestBean.selectedMyObject}</p>
        <p:commandLink id="Ajax" ajax="true" action="indexContent?faces-redirect=false">  
            <h:outputText value="Main page (link)" />
        </p:commandLink>
    </h:form>
</h:body>
....

请求范围的托管 bean listTestBean 包含 getter 和 setter 方法以及 valueChanged 方法。valueChanged 方法持有:

....
try {
        FacesContext.getCurrentInstance().getExternalContext().redirect("abcContent.xhtml");
} catch (IOException ioe) {
    System.err.println("listTestBean.valueChanged: IOException");
}
....

这基本上是对 abcContent 页面的重定向。

但是,当我从 selectItem 组件中选择一个项目时,没有使用指定的 layoutTempl 呈现 abcContent.xhtml 页面?

完全看不懂,不好意思!这可能是微不足道的,但我无法解决它!

问候

4

4 回答 4

0

这是一个较晚的响应,但根据我的经验,当文件路径为

“abcContent.xhtml”

代替

“面孔/abcContent.xhtml”

您甚至可以在浏览器的地址栏中对其进行测试。

此外,这并不意味着您的文件位于名为“faces”的文件夹中。它只是 web.xml 中指定的 url 模式

于 2013-11-29T00:28:02.823 回答
0

请输入模板的完整相对 url 而不是template="./layoutTempl.xhtml". 这意味着从当前目录加载模板。如果模板和页面位于同一目录中,只需将模板名称删除./ 查看此模板教程:

http://www.mkyong.com/jsf2/jsf-2-templating-with-facelets-example/

于 2013-07-01T12:49:43.480 回答
0

abcContent.xhtml你有

<ui:define name="main">
    <ui:include src="abc.xhtml"/>
</ui:define>

abc.xhtml被定义为

<h:body>
    <h2>We got at abc page!</h2>
    <br /><br />
    <h:form id="abcForm">
     ...
    </h:form>
</h:body>

没有<ui:composition>。您正在使用 XHTML,如果您提供了错误的标记,那么 JSF 将不会被正确解释。如果您使用的是 IDE,则在使用ui:include. 您可以通过打开浏览器并单击查看源代码来自行验证abcContent.xhtml。您会注意到页面的某些部分仍然包含 JSF 代码(例如h:body)。修复并重abc.xhtml试。

<h:body>
    <ui:composition>
        <h2>We got at abc page!</h2>
        <br /><br />
        <h:form id="abcForm">
         ...
        </h:form>
    </ui:composition>
</h:body>
于 2013-07-02T04:33:34.960 回答
0

尝试

<p:commandLink ajax="false" action="indexContent?faces-redirect=false"> 

您不需要 ajax 进行重定向。

于 2013-07-01T11:37:05.433 回答