Jsf 2 PrettyFaces和h:链接结果标记don';t重定向到一个干净的URL

Jsf 2 PrettyFaces和h:链接结果标记don';t重定向到一个干净的URL,jsf-2,url-rewriting,prettyfaces,Jsf 2,Url Rewriting,Prettyfaces,我用PrettyFaces重写错误页面对h:链接不起作用,我不明白为什么 我的链接应该重定向到login.xhtml,它应该是/login 发生了什么事,我错过了什么吗 我的重写规则导航: <navigation-rule> <from-view-id>/pageNotFound.xhtml</from-view-id> <navigation-case> <from-outcome>login<

我用PrettyFaces重写错误页面对h:链接不起作用,我不明白为什么

我的链接应该重定向到
login.xhtml
,它应该是
/login

发生了什么事,我错过了什么吗

我的重写规则导航:

<navigation-rule>
    <from-view-id>/pageNotFound.xhtml</from-view-id> 
    <navigation-case>
        <from-outcome>login</from-outcome>
        <to-view-id>/login.xhtml</to-view-id>
        <redirect/>
    </navigation-case>
</navigation-rule>

/pageNotFound.xhtml
登录
/login.xhtml
My web.xml用于错误页面处理和过滤器配置:

<error-page>
    <error-code>404</error-code>
    <location>/pageNotFound.xhtml</location>
</error-page>
<filter>
    <filter-name>Pretty Filter</filter-name>
    <filter-class>com.ocpsoft.pretty.PrettyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>Pretty Filter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
</filter-mapping>

404
/pageNotFound.xhtml
漂亮的过滤器
com.ocpsoft.pretty.PrettyFilter
漂亮的过滤器
/*
向前地
要求
包括
My-pretty-config.xml:

    <url-mapping id="login">
    <pattern value="/Login" />
    <view-id value="/login.xhtml" />
</url-mapping>

My pageNotFound.xhtml:

<rich:panel style="width:50%;margin-top:100px;" header="Page Not Found.">
    <h:link value="Login page" outcome="login" />
</rich:panel>

基本上,您混合了Prettyfaces的视图id和JSF的视图id。您不能在JSF上下文中直接使用此id,您可以认为它是一个漂亮的id。这应该可以:

<h:link value="Login page" outcome="pretty:login" />

另外,如果您更喜欢使用JSF id,可以直接使用/login:

<h:link value="Login page" outcome="/login" />


Prettyfaces的过滤器应该考虑到它是一个映射id,并直接重定向到您的/Login url。

首先,您不能将JSF导航规则与Prettyfaces映射混合使用。你必须使用其中一个

<rich:panel style="width:50%;margin-top:100px;" header="Page Not Found.">
    <h:link value="Login page" outcome="login" />
</rich:panel>

我认为“login”应该改为“/login”,否则JSF可能无法解决它。我可能错了

<rich:panel style="width:50%;margin-top:100px;" header="Page Not Found.">
    <h:link value="Login page" outcome="/login" />
</rich:panel>


如果您使用h:commandLink和action=“login”,它可以工作……但我想知道为什么它不能与output和h:link一起工作……已经测试过了,我发现第二个解决方案也有同样的问题,第一个解决方案会给我发回类似ocpsoft.mapping\u id=login的奇怪信息。。。我决定改用命令链接。谢谢你的评论。这是多么奇怪的行为啊,你这么做的时候是不是接触到了Prettyfaces的过滤器?你是说我的Pretty配置过滤器?我将配置发布到下面。奇怪的行为,我同意:),它应该像你提到的那样工作,这就是为什么我不明白什么配置不好。你的过滤器似乎配置正确。我告诉您只需在
com.ocpsoft.pretty.PrettyFilter
类上放置一个断点并调试它。而且,顺便说一句,最好编辑你自己的问题,包括更新,以便发布答案;不能将JSF导航规则与PrettyFaces映射混合使用。你必须使用其中一个。