jsf2导航问题

时间:2012-07-17 11:36:01

标签: jsf-2 seam3

我有一个使用jsf2,jboss 6.1和seam 3的应用程序。我想做这样的事情:

如果用户尝试访问该应用并且未经过身份验证,则应将其定向到登录页面。如果用户已经登录,即使他键入了登录URL,他也应该被定向到主页,而不是再次登录。所以我把它放在faces-config.xml

<navigation-rule>
    <navigation-rule>
    <from-view-id>/login.xhtml</from-view-id>
    <navigation-case>
        <if>#{identity.loggedIn}</if>
        <to-view-id>/user/search.xhtml</to-view-id>
        <redirect>
            <view-param>
                <name>cid</name>
                <value>#{userBean.conversation.id}</value>
            </view-param>
        </redirect>
    </navigation-case>
</navigation-rule>
    <from-view-id>*</from-view-id>
    <navigation-case>
        <from-action>#{identity.login}</from-action>
        <if>#{identity.loggedIn}</if>
        <to-view-id>/user/search.xhtml</to-view-id>
        <redirect>
            <view-param>
                <name>cid</name>
                <value>#{userBean.conversation.id}</value>
            </view-param>
        </redirect>
    </navigation-case>
    <navigation-case>
        <from-action>#{identity.login}</from-action>
        <from-outcome>failed</from-outcome>
        <to-view-id>/denied.xhtml</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>login</from-outcome>
        <to-view-id>/login.xhtml</to-view-id>
        <redirect />
    </navigation-case>
</navigation-rule>

但第一条规则不起作用。如果用户使用login.xhtml键入url,他将保留在页面上。我需要他被重定向。我怎么能这样做?

由于

凯利

1 个答案:

答案 0 :(得分:0)

我认为你必须使用seam-faces模块。它与seam-security集成在一起。 你应该看看this part of the doc

在我的项目中,我不使用任何导航规则,我的Pages配置对象如下所示:

@ViewConfig
public interface Pages {
    static enum Configuration {
        @ViewPattern("/pages/*")
        @LoggedIn
        PRIVATE,

        @UrlMapping(pattern="/pages/home.xhtml")
        @ViewPattern("/login.xhtml")
        @FacesRedirect(false)
        LOGIN,

        @ViewPattern("/*")
        @FacesRedirect
        @LoginView("/login.xhtml")
        ALL;

    }

}

This other question也帮助我做你需要的事。