Jsf 2 漂亮的表面和转换器不工作

Jsf 2 漂亮的表面和转换器不工作,jsf-2,converter,prettyfaces,Jsf 2,Converter,Prettyfaces,在我的web应用程序中,我有一个转换器,可以将字符串转换为java.util.LinkedHashMap(反之亦然)。当我尝试使用Prettyfaces时,我得到404 resource not found错误。以下是我的设置: 首先,根据这个,我试着用 @FacesConverter(forClass = LinkedHashMap.class) 我还尝试添加 <converter> <converter-for-class>java.util.LinkedHas

在我的web应用程序中,我有一个转换器,可以将字符串转换为java.util.LinkedHashMap(反之亦然)。当我尝试使用Prettyfaces时,我得到404 resource not found错误。以下是我的设置:

首先,根据这个,我试着用

@FacesConverter(forClass = LinkedHashMap.class)
我还尝试添加

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

java.util.LinkedHashMap
util.UrlConverter
到我的faces配置,xml

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

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

URL重写本身是有效的,因此我最终得到了URL: 重要:
以下是我认为可能存在的问题:我的所有ID都以“/”开头,因此在part“/dataset”之后总是有两个“/”。如果这是我的问题的原因,那么我如何重写这些斜杠呢

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

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

这意味着类似的东西应该会起作用:

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


另一个选项是用转换器中的其他字符替换
/
字符

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

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

这意味着类似的东西应该会起作用:

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


另一个选项是用转换器中的其他字符替换
/
字符

嘿,谢谢你的回答。我还不能测试你的提议,但我有一个后续问题。当我像这样手动输入正确的URL时(因此没有双斜杠),我得到一个空白页面。这不应该正常工作吗?好的,我测试了它,它工作了,但我有另一个问题。我使用的是primefaces fileupload组件(),我为“fileUploadListener”属性指定的方法在我的类路径中有了prettyfaces库后就不再触发了,这是人们经常遇到的一个众所周知的问题。我认为您必须配置PrimeFaces过滤器来拦截转发的请求或类似的内容。看看论坛。关于这一点有一些线索:是的,谢谢,我已经知道了。不过,我最初的问题有些不对劲。我决定用“%2F”替换ID中的所有“/”,然后在转换器中将它们更改回原来的状态。现在我应该只需要安装我张贴在上面的权利?然而,当我调用一个URL时,就像我在一个空白页面结束一样,我的转换器方法没有被调用……控制台上的任何日志。除非你的应用程序有其他问题,否则这种情况不会发生。你应该在PrettyFaces论坛上发布更多关于你的设置的详细信息。我认为这是一个更好的讨论这个问题的地方。我也不确定使用%2F是否能正确工作,因为它是/的编码形式。所以它实际上和a/是一样的。尝试一些不同的东西,比如-。嘿,谢谢你的回答。我还不能测试你的提议,但我有一个后续问题。当我像这样手动输入正确的URL时(因此没有双斜杠),我得到一个空白页面。这不应该正常工作吗?好的,我测试了它,它工作了,但我有另一个问题。我使用的是primefaces fileupload组件(),我为“fileUploadListener”属性指定的方法在我的类路径中有了prettyfaces库后就不再触发了,这是人们经常遇到的一个众所周知的问题。我认为您必须配置PrimeFaces过滤器来拦截转发的请求或类似的内容。看看论坛。关于这一点有一些线索:是的,谢谢,我已经知道了。不过,我最初的问题有些不对劲。我决定用“%2F”替换ID中的所有“/”,然后在转换器中将它们更改回原来的状态。现在我应该只需要安装我张贴在上面的权利?然而,当我调用一个URL时,就像我在一个空白页面结束一样,我的转换器方法没有被调用……控制台上的任何日志。除非你的应用程序有其他问题,否则这种情况不会发生。你应该在PrettyFaces论坛上发布更多关于你的设置的详细信息。我认为这是一个更好的讨论这个问题的地方。我也不确定使用%2F是否能正确工作,因为它是/的编码形式。所以它实际上和a/是一样的。尝试一些不同的东西,比如-。