为了账号安全,请及时绑定邮箱和手机立即绑定

理解JSF2中的Flash Scope

理解JSF2中的Flash Scope

素胚勾勒不出你 2019-08-02 17:15:53
理解JSF2中的Flash Scope根据我的理解,面向请求生命周期中放置在Flash作用域内的对象将可用于下一个面请求生命周期,然后清除。假设我有两页:page01.xhtml:<h:form>     <h:commandButton  action="#{page01Bean.action}" /></h:form>Page01Bean:@ManagedBean@RequestScopedpublic class Page01Bean {         public void action(){             FacesContext.getCurrentInstance().getExternalContext().getFlash().put("fooKey", "fooValue");         }}page02.xhtml:<h:outputText value="#{flash.fooKey}"/>因此,当page01.xhtml单击按钮时,面部请求生命周期(比如生命周期A)开始并将值设置为所调用的键下的闪存fooKey然后我打开另一个浏览器选项卡并浏览 page02.xhtml。另一个面临请求生命周期(比如生命周期B)开始呈现此页面。我预计生命周期B可以访问其上一个生命周期的闪存范围(即生命周期A)并显示fooValue在其中 page02.xhtml。但是,它什么也没显示。请纠正我在这个例子中对闪存范围的误解。非常感谢
查看完整描述

3 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

简而言之,存储在闪存范围中的变量将在重定向后继续存在,之后将被丢弃。这在实现Post-Redirect-Get模式时非常有用。

如果您尝试通过重定向导航到另一个页面并在加载时访问属性,它们将在那里。完成该请求后,闪存中的值将被丢弃。例如:

你在page1.xhtml中,你有一个commandLink,它使用类似这样的方法重定向到一个新页面(注意:我将使用隐式导航)。

public String navigateToPageB() {
    FacesContext.getCurrentInstance().getExternalContext().getFlash().put("param1", "Hello World!");
    return "pageB?faces-redirect=true";}

呈现pageB.xhtml时,您可以通过EL表达式访问这些值,例如

<h:outputLabel value="#{flash['param1']}" />

这将显示“Hello World!” 我们之前在navigateToPageB中保存的字符串。

至于您的问题,通过在资源管理器中打开新选项卡,您无法访问上一个选项卡上访问的相同上下文,因此您的变量将不可用。


查看完整回答
反对 回复 2019-08-02
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

把它设置在EL没有为我做的技巧,但相反,我可以建议将它放入托管bean:FacesContext.getCurrentInstance().getExternalContext().getFlash().keep("oValue"); this.oValue = (ValueClass) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("oValue"); 它适用于GET再次ting页面,但它在ajax请求后以某种方式中断+ GET

查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 600 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信