Prettyfaces和转换器无法正常工作

时间:2013-02-21 21:45:39

标签: jsf-2 converter prettyfaces

在我的Web应用程序中,我有一个转换器,它从String转换为java.util.LinkedHashMap(反之亦然)。当我尝试使用Prettyfaces时,我得到404资源未找到错误。这是我的设置:

首先根据这个post,我尝试用

装饰转换器
@FacesConverter(forClass = LinkedHashMap.class)

我也尝试添加

<converter>
  <converter-for-class>java.util.LinkedHashMap</converter-for-class>
  <converter-class>util.UrlConverter</converter-class>
</converter>

到我的faces-config,xml。

现在我的pretty-config.xml的相关代码是:

<url-mapping id="details">
<pattern value="/dataset/#{id}" />
<view-id value="/faces/details.xhtml" />
</url-mapping>

网址重写本身有效,所以我最终在网址:http://server.com/appname/dataset//someID 重要提示: 以下是我认为可能存在的问题:我的所有ID都以“/”开头,因此在“/ dataset”部分后总是有两个“/”。如果这是我的问题的原因,我怎么能重写这些斜杠呢?

1 个答案:

答案 0 :(得分:1)

我认为/字符确实是导致问题的原因。默认情况下,PrettyFaces使用正则表达式[^/]+来匹配路径参数。因此,如果路径参数包含/个字符,则映射将不匹配。

您应该为路径参数使用自定义正则表达式,如下所述:

http://ocpsoft.org/docs/prettyfaces/3.3.3/en-US/html/Configuration.html#config.pathparams.regex

这意味着这样的事情应该有效:

<url-mapping id="details">
  <pattern value="/dataset/#{ /.+/ id }" />
  <view-id value="/faces/details.xhtml" />
</url-mapping>

另一种选择是将/字符替换为转换器中的其他字符。