禁用seam的重定向过滤器

时间:2009-01-10 20:13:51

标签: java seam

我正在接缝中做一个需要安静网址的项目。我有一个映射到/ 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 = {cid}'。所以有什么问题?好吧,想象一下像'/ group / {group} / {locale}#{id}?conversationId = {cid}'这样的网址。显然,浏览器不喜欢这个,也不会自动转到那个锚点。

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

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

<web:redirect-filter url-pattern="*.seam"/>

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

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

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

2 个答案:

答案 0 :(得分:7)

我已经找到了不需要的conversationId查询字符串参数的来源。

<redirect/>会调用org.jboss.seam.faces.FacesManager.redirect(String viewId, Map<String, Object> parameters, boolean includeConversationId)

通过org.jboss.seam.faces.Navigator中的以下代码调用此方法,将includeConversationId设置为true:

  FacesManager.instance().redirect(viewId, parameters, true);

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

  FacesManager.instance().redirect(viewId, parameters, false);

答案 1 :(得分:1)

好的,我设法通过将其添加到我的compononents.xml来杀死重定向过滤器:

<web:redirect-filter disabled="true" installed="false" />

然而,我的主要问题仍然存在,所以这显然不是问题。它仍然将conversationId添加为URL上的额外查询字符串。从it has been done before开始,我正在做错事。

@Adeel Ansari:

的components.xml:

 <web:rewrite-filter view-mapping="/seam/*" />

pages.xml看到我最初的问题。