代码之家  ›  专栏  ›  技术社区  ›  Matthias van der Vlies

禁用Seam的重定向筛选器

  •  7
  • Matthias van der Vlies  · 技术社区  · 17 年前

    我正在Seam中执行一个需要RESTful URL的项目。我有一个映射到/group/group/locale的视图。在那个页面上,我有一个所谓的消息列表。每条消息都有一个按钮,用于保存对消息的更改。这与这样的操作bean链接:

    <h:commandButton type="submit" value="Save Changes" action="#{groupAction.update}" />
    

    每个消息都有一个锚,因此/group/group/locale id可用于使浏览器转到该锚。这就是为什么我在发帖后需要重新定向:

    <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>
    

    我在这里去掉了会话ID。这是一件作品。然而,接缝仍然附加一个'?会话ID=CID”。有什么问题吗?好吧,想象一下类似于'/group/group/locale id的URL?会话ID=CID”。Ovily浏览器不喜欢这样,不会自动转到该锚。

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

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

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

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

    如何禁用Seam中的重定向过滤器?

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

    2 回复  |  直到 17 年前
        1
  •  7
  •   Peter Hilton    17 年前

    我已经弄清楚那些不想要的 conversationId 查询字符串参数来自。

    这个 <redirect/> 导致呼叫 org.jboss.seam.faces.FacesManager.redirect(String viewId, Map<String, Object> parameters, boolean includeConversationId)

    这是从以下代码调用的 org.jboss.seam.faces.Navigator 哪套 includeConversationId 成真:

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

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

      FacesManager.instance().redirect(viewId, parameters, false);
    
        2
  •  1
  •   Matthias van der Vlies    17 年前

    好吧,我把这个添加到components.xml中,成功地终止了重定向过滤器:

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

    但是我的主要问题仍然存在,所以这显然不是问题所在。它仍然将conversationid作为额外的查询字符串添加到URL上。从表面上看,我做错了什么 it has been done before .

    @ Adeel Ansari:

    组件:XML:

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

    pages.xml请参阅我的初始问题。