0

我有一个问题。看起来 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 都不会被调用。不是第一个或第二个 url 模式。

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

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

任何帮助表示赞赏,谢谢

4

1 回答 1

1

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

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

您需要更严格地限制该模式,使其不会与您的其他 URL 冲突。

当包含 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 可以处理请求时,它会阻止规则匹配。

于 2012-05-09T12:25:10.923 回答