【问题标题】:What are jftfdi jffi doing to my query string?jftfdi jffi 对我的查询字符串做了什么?
【发布时间】:2013-07-09 19:29:33
【问题描述】:

我们在项目中使用 JavaServer Faces 2.2 (Mojarra 2.2.1)。我注意到了一些奇怪的事情。在名为reporting.xhtml 的页面上,我使用f:metadata 和新的f:viewAction 我的浏览器(在本例中为Safari)显示以下查询字符串:

reporting.jsf?jftfdi=&jffi=reporting%3Ffaces-redirect%3Dtrue

这是什么魔法?参数 jftfdi 和 jiffi 是做什么的?他们的目的是什么?

【问题讨论】:

    标签: jsf jsf-2 jsf-2.2


    【解决方案1】:

    它是规范 issue 949 中描述的新 JSF 2.2 功能的一部分。基本上,它使 JSF 能够识别客户端窗口。它与CDI的@ConversationScoped中的cid和CODI的@ViewScoped/@ViewAccessScoped中的windowId基本相同。此客户端窗口 ID 依次由规范 issue 730 描述的新 JSF 2.2 @FlowScoped 范围使用。

    “JSF 2.2 中有什么新功能?”我的同事 Arjan Tijms 的文章非常清楚地解释了这种需求:

    生命周期

    通过 Window Id 识别客户端窗口

    可以说,自 Web 应用程序开发以来一直困扰其的最大问题之一是无法区分来自单个浏览器的不同窗口的请求。不仅早就应该找到实际的解决方案,而且需要很长时间才能意识到这甚至是一个问题。

    一如既往,问题的根源在于 HTTP 协议本质上是无状态的,而应用程序通常不是。但是有一个 cookie 的概念,它主要是用于区分来自不同用户的请求并实现诸如会话范围之类的东西的机制,而大部分登录机制又是基于它的。

    虽然 cookie 确实适用于此,但它对于每个浏览器和域都是全局的。如果用户为同一个域打开多个选项卡或窗口,那么来自这些的请求都会将相同的 cookie 发送到服务器。因此,在同一网站的不同窗口中以不同用户身份登录通常是不可能的,因此在不同窗口中拥有工作流程(包括回发、导航)也可能很麻烦。

    在 JSF 中有各种与此相关的解决方案。只要用户停留在同一页面上并且只进行回发,视图范围就有效地实现了每个窗口的会话。当通过 Redirect/GET 完成导航时,Flash 用于在不同页面之间(可能在同一窗口内)传输数据。第三方实现了各种各样的作用域,它们做类似的事情。

    所有这些都对“客户端窗口”的概念有一些隐含的概念或假设,但没有明确的 API。

    JSF 2.2 将引入对这两个不同方面的支持:

    • 单个窗口的标识:客户端窗口 ID
    • 窗口概念的 API 和生命周期意识

    显然你已经这样配置了你的应用程序。

    另见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      相关资源
      最近更新 更多