什么是jftfdi jffi对我的查询字符串做什么?

rau*_*ach 7 jsf jsf-2 jsf-2.2

我们在项目中使用JavaServer Faces 2.2(Mojarra 2.2.1).我注意到一些奇怪的事 在reporting.xhtml我使用f:metadataf:viewAction浏览器的页面上,在这种情况下,Safari显示以下查询字符串:

reporting.jsf?jftfdi=&jffi=reporting%3Ffaces-redirect%3Dtrue
Run Code Online (Sandbox Code Playgroud)

这是什么巫术?jftfdi和jiffi做的参数是什么?他们的目的是什么?

Bal*_*usC 9

它是规范问题949所描述的新JSF 2.2功能的一部分.基本上,它使JSF能够识别客户端窗口.这是基本相同cid的CDI的@ConversationScopedwindowId在CODI的@ViewScoped/ @ViewAccessScoped.该客户端窗口ID又@FlowScoped由规范问题730所描述的新JSF 2.2 范围使用.

"JSF 2.2中有什么新东西?" 我的同事Arjan Tijms的文章非常明确地解释了这个问题:

生命周期

通过Window Id识别客户端窗口

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

与往常一样,问题的根源在于HTTP协议本质上是无状态的,而一般情况下应用程序则不是.虽然存在cookie的概念,但绝大多数是用于区分来自不同用户的请求并实现诸如会话范围之类的机制,其中大部分登录机制基于该会话范围.

虽然cookie确实适用于此,但它是每个浏览器和域的全局.如果用户为同一个域打开多个选项卡或窗口,那么来自这些选项的请求将向服务器发送相同的cookie.因此,通常不可能在同一网站的不同窗口中作为不同用户登录,并且由于这个原因,在不同窗口中具有工作流程(涉及回发,导航)也可能是麻烦的.

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

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

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

  • 标识单个窗口:客户端窗口标识
  • API和生活方式对窗口概念的认识

显然你已经配置了你的应用程序.

也可以看看: