禁用seam的重定向过滤器

Mat*_*ies 7 java seam

我正在做一个需要安静网址的接缝项目.我有一个映射到/ group/{group}/{locale}的视图.在那个页面上,我有一个所谓的消息列表.每条消息都有一个按钮,用于保存对消息的更改.这链接到这样的动作bean:

<h:commandButton type="submit" value="Save Changes" action="#{groupAction.update}" />
Run Code Online (Sandbox Code Playgroud)

每条消息都有一个锚点,因此/ 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>
Run Code Online (Sandbox Code Playgroud)

我还有以下重定向规则(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>
Run Code Online (Sandbox Code Playgroud)

我在这里删除了对话.这已被测试过一部作品.然而,接缝仍会附加'?conversationId = {cid}'.所以有什么问题?好吧,想象一下像'/ group/{group}/{locale}#{id}?conversationId = {cid}'这样的网址.显然浏览器不喜欢这个,并且不会自动转到那个锚点.

我做了一些研究,发现我在缝文档中的问题:

29.1.4.2.使用重定向进行对话传播 此过滤器允许Seam跨浏览器重定向传播对话上下文.它拦截任何浏览器重定向,并添加一个指定Seam会话标识符的请求参数.重定向过滤器将默认处理所有请求,但也可以在components.xml中调整此行为:

<web:redirect-filter url-pattern="*.seam"/>
Run Code Online (Sandbox Code Playgroud)

我不需要重定向过滤器,我尝试在url-pattern中放置一些无效的东西来"禁用"过滤器.但是那没用.所以现在我的问题是:

如何在接缝中禁用重定向过滤器?

我找不到答案.seam文档讨论了在web.xml中禁用它,但我的尝试还没有成功.

Pet*_*ton 7

我已经找到了不需要的conversationId查询字符串参数来自哪里.

<redirect/>在的通话效果org.jboss.seam.faces.FacesManager.redirect(String viewId, Map<String, Object> parameters, boolean includeConversationId)

这是从以下代码中调用的,org.jboss.seam.faces.Navigator其中sets设置includeConversationId为true:

  FacesManager.instance().redirect(viewId, parameters, true);
Run Code Online (Sandbox Code Playgroud)

我看不出有任何方法可以避免这种情况,因此修复/解决方法是在操作方法中以编程方式执行重定向:

  FacesManager.instance().redirect(viewId, parameters, false);
Run Code Online (Sandbox Code Playgroud)