我正在接缝中做一个需要宁静 URL 的项目。我有一个映射到 /group/{group}/{locale} 的视图。在那个页面上,我有一个所谓的消息列表。每条消息都有一个按钮来保存对消息的更改。这与这样的操作 bean 相关联:
<h:commandButton type="submit" value="Save Changes" action="#{groupAction.update}" />
每条消息都有一个锚点,因此 /group/{group}/{locale}#{id} 可用于使浏览器转到该锚点。这就是为什么我需要在 POST 之后进行重定向:
<page view-id="/group.xhtml">
<rewrite pattern="/group/{group}/{locale}"/>
<param name="group" value="#{groupAction.group}"/>
<param name="locale" value="#{groupAction.locale}"/>
<navigation from-action="#{groupAction.update}">
<redirect view-id="/group.xhtml?group=#{group}&locale=#{locale}##{id}"/>
</navigation>
</page>
此外,我有以下重定向规则 (UrlRewriteFilter) 来获取正确的 RESTful URL:
<outbound-rule>
<from>^/group.xhtml\?group=([\.\w]+)&locale=([\.\w]+)\#([\.\w]+)\?cid=(\d*)$</from>
<to type="temporary-redirect" last="true">/group/$1/$2#$3</to>
</outbound-rule>
我在这里去掉了 conversationId。这是一个经过测试的作品。然而,接缝仍然附加一个“?conversationId = {cid}”。所以有什么问题?好吧,想象一个像 '/group/{group}/{locale}#{id}?conversationId={cid}' 这样的 URL。显然浏览器不喜欢这个并且不会自动转到那个锚点。
我做了一些研究并在接缝文档中发现了我的问题:
29.1.4.2。带有重定向的对话传播 这个过滤器允许Seam 跨浏览器重定向传播对话上下文。它拦截任何浏览器重定向并添加一个指定Seam 对话标识符的请求参数。重定向过滤器默认会处理所有请求,但也可以在 components.xml 中调整此行为:
<web:redirect-filter url-pattern="*.seam"/>
我不需要重定向过滤器,我尝试在 url 模式中放置一些无效的东西来“禁用”过滤器。然而这并没有奏效。所以我现在的问题是:
如何禁用接缝中的重定向过滤器?
我找不到答案。接缝文档谈到在 web.xml 中禁用它,但我的尝试还没有成功。