我使用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>
我的web.xml用于错误页面处理和Pretty Filter配置:
<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>
我的漂亮配置文件:
<url-mapping id="login">
<pattern value="/Login" />
<view-id value="/login.xhtml" />
</url-mapping>
我的pageNotFound.xhtml:
<rich:panel style="width:50%;margin-top:100px;" header="Page Not Found.">
<h:link value="Login page" outcome="login" />
</rich:panel>
答案 0 :(得分:4)
基本上,你将Prettyfaces的视图ID与JSF的视图ID混合在一起。你不能在JSF上下文中直接使用这个id,你need to tell它是一个漂亮的 id。这应该有效:
<h:link value="Login page" outcome="pretty:login" />
此外,如果您更喜欢使用JSF ID,则可以直接使用 / login :
<h:link value="Login page" outcome="/login" />
Prettyfaces的过滤器应该考虑到它是一个映射的ID并直接重定向到 / Login url。
答案 1 :(得分:0)
首先,您不能将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>