如何在faces-config.xml中不使用navigation-case的情况下在两个页面之间实现JSF导航

时间:2011-11-18 10:39:04

标签: jsf jsf-1.2

我正在寻找JSF导航的另一种方式,而不是在faces-config.xml中提及导航案例。

目前我正在使用faces-config.xml进行导航。我想清理它。

请建议所有其他方式,以便我可以使用任何适合我的需要。

3 个答案:

答案 0 :(得分:5)

对于简单的页面到页面导航(不提交任何内容),您应该使用<h:outputLink>而不是<h:commandLink>

所以,

<h:form>
    <h:commandLink value="Page 1" action="page1" />
    <h:commandLink value="Page 2" action="page2" />
    <h:commandLink value="Page 3" action="page3" />
</h:form>

和那些导航案例

<navigation-rule>
    <navigation-case>
        <from-outcome>page1</from-outcome>
        <to-view-id>page1.jsf</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>page2</from-outcome>
        <to-view-id>page2.jsf</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>page3</from-outcome>
        <to-view-id>page3.jsf</to-view-id>
    </navigation-case>
</navigation-rule>

应该使用

<h:outputLink value="page1.jsf">Page 1</h:outputLink>
<h:outputLink value="page2.jsf">Page 2</h:outputLink>
<h:outputLink value="page3.jsf">Page 3</h:outputLink>

对于真实表单提交,您应该重写操作方法以返回voidnull而不是结果。

<h:form>
     <h:inputText value="#{bean.query}" />
     <h:commandButton value="Search" action="#{bean.search}" />
</h:form>

public String search() {
    results = searchService.find(query);
    return "results";
}

在一个页面上

<h:dataTable value="#{bean.results}" var="result">
    ...
</h:dataTable>

在其他页面和此导航案例

<navigation-rule>
    <from-view-id>search.jsf</from-view-id>
    <navigation-case>
        <from-outcome>results</from-outcome>
        <to-view-id>results.jsf</to-view-id>
    </navigation-case>
</navigation-rule>

应该使用

<h:form rendered="#{empty bean.results}">
     <h:inputText value="#{bean.query}" />
     <h:commandButton value="Search" action="#{bean.search}" />
</h:form>
<h:dataTable value="#{bean.results}" var="result" rendered="#{not empty bean.results}">
    ...
</h:dataTable>

public void search() {
    results = searchService.find(query);
}

如果需要,您可以<jsp:include>包含页面片段。

另见:

答案 1 :(得分:2)

// JSF

<h:outputLink value="login.xhtml" >
    Login page
</h:outputLink>

// HTML输出

<a href="login.xhtml">
    Login page
</a>

请参阅此网址以获取更多信息: -

<强> commandLink and outputLink example

答案 2 :(得分:0)

您可以将导航操作的返回值设置为您要转到的页面名称(例如return "page2";切换到 page2.jsf )。但据我所知,这个功能首先在JSF 2.0中实现。