在我的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”部分后总是有两个“/”。如果这是我的问题的原因,我怎么能重写这些斜杠呢?
答案 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>
另一种选择是将/
字符替换为转换器中的其他字符。