如果我不想在faces-config.xml中创建条目,如何指定导航规则

时间:2012-05-11 06:48:36

标签: jsf myfaces

现在我在faces-config.xml文件中提供导航规则。如果我想停止在faces-config.xml中创建条目。

如果我不想在faces-config.xml中执行此操作,如何指定导航规则?

“faces-config.xml中”

<?xml version="1.0"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
    <navigation-rule>
        <description>Navigation from the hello page.</description>
        <from-view-id>/login.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>success</from-outcome>
            <to-view-id>/wsListing.xhtml</to-view-id>
            <redirect />
        </navigation-case>
    </navigation-rule>
    <navigation-rule>
        <description>Navigation from the hello page.</description>
        <from-view-id>/wsListing.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>ebzService</from-outcome>
            <to-view-id>/ebzinput.xhtml</to-view-id>
            <redirect />
        </navigation-case>
        <navigation-case>
            <from-outcome>filterEbz</from-outcome>
            <to-view-id>/filterebzinput.xhtml</to-view-id>
            <redirect />
        </navigation-case>
    </navigation-rule>


    <navigation-rule>
        <description>Navigation from the hello page.</description>
        <from-view-id>/ebzinput.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>success</from-outcome>
            <to-view-id>/ebzoutput.xhtml</to-view-id>
            <redirect />
        </navigation-case>
        </navigation-rule>

</faces-config>

2 个答案:

答案 0 :(得分:3)

自JSF 2.0起,仅支持隐式导航。根据XML文件根声明和您的问题历史记录,您使用的是JSF 1.2,这就是故事的结尾。

但是,根据您当前的导航案例,您似乎每次都会重定向。为此,您也可以使用ExternalContext#redirect()

public void login() throws IOException {
    // ...

    FacesContext.getCurrentInstance().getExternalContext().redirect("wsListing.xhtml");
}

或者,如果您实际上根本不需要执行业务操作,只需使用普通链接。

<h:outputLink value="ebzinput.xhtml">go to ebzinput</h:outputLink>

额外的好处是它变成了searchbot-indexable(从而更好的SEO)。

答案 1 :(得分:0)

操作方法可以返回视图ID,而不是“成功”,例如

public String login() { return "wsListing"; }

这样您就可以将导航规则转移到托管bean。 如果要强制执行重定向,请使用

public String login() { return "wsListing?faces-redirect=true"; }