我有一个问题。看起来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的一个例子)来显示动态图像!
任何帮助表示赞赏, 感谢
答案 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以其他方式处理请求时,它会阻止规则匹配。