加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

了解JSF2中的Flash Scope

发布时间:2020-12-15 19:50:18 所属栏目:百科 来源:网络整理
导读:根据我的理解,在面向请求生命周期中放置在Flash范围内的对象将可用于下一个面请求生命周期,然后清除。 假设我有两个页面: page01.xhtml: h:form h:commandButton action="#{page01Bean.action}" //h:form Page01Bean: @ManagedBean@RequestScopedpublic
根据我的理解,在面向请求生命周期中放置在Flash范围内的对象将可用于下一个面请求生命周期,然后清除。

假设我有两个页面:

page01.xhtml:

<h:form>
    <h:commandButton  action="#{page01Bean.action}" />
</h:form>

Page01Bean:

@ManagedBean
@RequestScoped
public 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)和显示fooValuein page02.xhtml。但是,它不显示任何内容。

请纠正我对本示例中的Flash范围的误解。非常感谢

解决方法

简而言之,存储在闪存范围中的变量将在重定向后生存,并且它们之后将被丢弃。这在实现后重定向获取模式时非常有用。

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

你在page1.xhtml,你有一个命令链接重定向到一个新的页面与这样的方法(注意:我将使用隐式导航)。

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

当呈现page.B.xhtml时,您可以通过EL表达式(如)来访问这些值

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读