7

我正在接缝中做一个需要宁静 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 中禁用它,但我的尝试还没有成功。

4

2 回答 2

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);
于 2009-01-13T15:53:53.217 回答
1

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

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

但是我的主要问题仍然存在,所以这显然不是问题。它仍然在 URL 上添加了 conversationId 作为额外的查询字符串。显然我做错了什么,因为它已经完成了

@Adeel Ansari:

组件.xml:

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

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

于 2009-01-12T09:05:08.440 回答