亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

理解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 關注
  • 633 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號