gpt4 book ai didi

jsf - 了解JSF2中的Flash作用域

转载 作者:行者123 更新时间:2023-12-03 09:04:38 25 4
gpt4 key购买 nike

据我了解,在面孔请求生命周期中放置在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的键下的flash

然后,我打开另一个浏览器选项卡并浏览 page02.xhtml。另一个面孔请求生命周期(例如生命周期B)开始呈现此页面。我希望生命周期B可以访问其先前生命周期的闪存作用域(即生命周期A),并在 fooValue中显示 page02.xhtml。但是,它什么也不显示。

请更正我对本示例中关于Flash作用域的误解。非常感谢

最佳答案

简而言之,存储在闪存作用域中的变量将在重定向后保留下来,之后将被丢弃。当实现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!”我们之前保存在navigationToPageB中的字符串。

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

关于jsf - 了解JSF2中的Flash作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11194112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com