簡體   English   中英

重置JSF Backing Bean(視圖或會話范圍)

[英]Reset JSF Backing Bean(View or Session Scope)

我想在調用某個方法時通過JSF支持bean重置。 假設有一個命令按鈕,有人按下它,在成功完成事務后,我的View或Session范圍JSF bean應該被重置。 有沒有辦法做到這一點?

謝謝

當您從操作方法返回非null或非void時,將重新創建視圖范圍bean,即使它將返回到同一視圖。 所以,只需從action方法返回一個String ,即使它只是一個空字符串:

public String submit() {
    // ...

    return "";
}

要使其完整,您可以考慮通過將?faces-redirect=true查詢字符串附加到返回的結果來發送重定向。

public String submit() {
    // ...

    return "viewId?faces-redirect=true";
}

對於您目前正在嘗試實現的任何內容,會話范圍的bean首先是錯誤的范圍。 有問題的bean應該是一個視圖范圍的bean。 忽略這一點,您可以在action方法中重新創建模型,或者可能完全使會話無效(這也會破壞所有其他視圖和會話范圍的bean,但不確定這是否是您所追求的)。

我找到了View范圍的解決方案。

    public static void removeViewScopedBean(String beanName) 
    {
      FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove(beanName);
    }

只是清除所有意見:

FacesContext.getCurrentInstance().getViewRoot().getViewMap().clear();

並記住在所有視圖中實現Serializable

您還可以從javascript刷新頁面,因此ViewScoped Bean將被重置,例如在primefaces commandButton中:

<p:commandButton value="Button" action="#{bean.someAction()}" oncomplete="location.reload()"/>

我用這樣的代碼解決了這個問題:

((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getSession().removeAttribute("bean name");            

通過這種方式,我進入會話范圍的bean並重置它沒有之前的數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM