PrettyFaces 3.32 / JSF 2 / Servlet 3.0的问题

时间:2012-05-08 20:39:52

标签: jsf servlets prettyfaces

我有一个问题。看起来PrettyFaces正在覆盖我的webservlet url模式。

我的pretty-config.xml的一部分

<url-mapping id="searchClassifiedAdsBeanRewrite">
     <pattern value="/#{prefixDummy}/#{region:searchBean.region}/#{category:searchBean.category}" />
     <view-id value="/searchClassifiedAds.html" />
</url-mapping>

我的servlet urlPattern跟随

@WebServlet(urlPatterns = {"/images/*", "/images/temp/*"})

现在,每当我有适用于我的漂亮面孔定义的url时,我的webservlet urlpattern永远不会被调用。不是第一个或第二个网址模式。

如果我没有漂亮的面孔匹配,那么一切正常。 (即使我更改了#{prefixDummy}和硬编码,它也无法正常工作。

我正在使用文件servlet(实际上是BalusC的一个例子)来显示动态图像!

任何帮助表示赞赏, 感谢

1 个答案:

答案 0 :(得分:1)

PrettyFaces支持论坛可能是你想要开始这个问题的地方:http://ocpsoft.org/support/forum/prettyfaces-users

但是既然你在这里问:)基本上你所看到的是预期的行为。 PrettyFaces将匹配任何入站Servlet请求,转发,错误或包含匹配给定模式。如果您的图片网址恰好与该图案匹配,那么这些图片将与您的漂亮网址映射相匹配,就像任何其他网址一样。

您需要更严格地限制模式,以使其不与其他网址冲突。

当包含Rewrite核心框架(http://ocpsoft.org/rewrite/)时,这将更容易在PrettyFaces 4中解决。您可以匹配URL,同时排除现有Servlet映射的URL。)

重写时已经可以了:

ConfigurationProvider.begin()
.addRule(Join.path("/{prefixDummy}/{region}/{category}").to()
         .when(Not.any(ServletMapping.includes("/{prefixDummy}/{region}/{category}")))
         .where("region").bindsTo(PhaseBinding.to(El.parameter("searchBean.region")))
         .where("category").bindsTo(PhaseBinding.to(El.parameter("searchBean.category"))))

注意负面约束:ServletMapping.includes("/{prefixDummy}/{region}/{category}"),当容器中的Servlet以其他方式处理请求时,它会阻止规则匹配。