PrettyFaces url从表单提交路由

时间:2014-09-23 15:56:18

标签: jsf-2 prettyfaces

我使用Pretty Faces进行URL重写,以便能够重用某些xhtml文件。我想要像' /honda/index.xhtml'这样的网址;和' /toyota/index.xhtml'两者都转到相同的/make/index.xhtml文件,make作为参数进入。这个路由似乎可以正常使用这样的配置:

<url-mapping id="carMake">
    <pattern value="/#{make}/index.xhtml"></pattern>
    <view-id value="/make/index.xhtml"/>
</url-mapping>

我也有搜索结果类型页面的映射:

<url-mapping id="search">
    <pattern value="/#{make}/search/index.xhtml" />
    <view-id value="/search/index.xhtml" />
</url-mapping>

当我手动将URL放入浏览器时,这两种方法都可以正常工作。

当我尝试在第一页上放置表单时,我遇到了一个问题,我想重定向到第二页。我有一个表格的jsf xhtml代码:

<h:form>
    <h:messages />
    <h:inputText id="searchTerm"/>
    <h:commandButton value="search" action="/honda/search/index.xhtml?faces-redirect=true"/>
</h:form>

(硬编码/本田这里简化示例)

当我尝试提交此搜索时,它会反弹回相同的/honda/index.xhtml,页面上不会显示任何消息。

日志显示:

09-23 11:39:55 DEBUG PrettyNavigationHandler:57 - Navigation requested: fromAction [/honda/search/index.xhtml?faces-redirect=true], outcome [/honda/search/index.xhtml?faces-redirect=true]
09-23 11:39:55 DEBUG PrettyNavigationHandler:60 - Not a PrettyFaces navigation string - passing control to default nav-handler

我没有使用faces-redirect参数尝试过,但得到的结果相同。

为什么/honda/search/index.xhtml直接放入浏览器时会起作用,但不是因为操作的结果?

2 个答案:

答案 0 :(得分:1)

您不能以这种方式将漂亮的URL用作action属性的值。您必须使用标准JSF结果,make是查询参数。

试试这个:

<h:commandButton value="search" 
           action="/honda/search/index.xhtml?faces-redirect=true&make=honda"/>

答案 1 :(得分:1)

如果您想使用View ID中的URL,并且您不想在应用中引用view-id,那么您需要使用漂亮的导航字符串:

<h:commandButton value="search" action="pretty:honda"><f:param name="make" value="honda" /></h:commandLink>

但这真的只是使它变得比它需要的更复杂。我建议做@chkal建议的,除了他的例子有点不对。应该是:

<h:commandButton value="search" action="/search/index.xhtml?faces-redirect=true&make=honda"/>

这应该包含在文档:) http://ocpsoft.org/docs/prettyfaces/3.3.3/en-US/html/components.html#components.prettylink中检查该部分(以及它下面的部分),看看是否有帮助!