2013-10-21 53 views
2

我有一個@ViewScoped -annotated managedbean,它的@PostContruct -method從數據庫中提取一個列表以顯示在視圖的表中。
現在,當我刪除一個項目時,我希望在視圖中看到更改。
爲了保持這種動態和可重用性,我只想從數據庫中刪除(而不是從列表中手動刪除)。所以我需要銷燬/重新創建我認爲的bean。現在我通過導航到相同的視圖來做到這一點。但我做的方式不可重用。
我可以直接銷燬這個bean嗎?或者導航到相同的視圖,而沒有顯式地導航到那個特定的視圖(可重用性)?如何觸發銷燬viewcoped bean?

我使用JSF 2.1

回答

2

您已經走上正軌。 viewMap就像其他地圖一樣;您可以按名稱刪除一個ViewScoped bean。請原諒這個殘暴的鏈接:

FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove("yourBean"); 
+0

謝謝你的回答。雖然我知道在這個問題中進化出來的要求,但你對我所問的問題給出了正確的答案。新的問題將隨之而來...... :) – Lester

+0

@Lester - 不客氣 – kolossus

-1

當您從一個動作的方法中返回一個非空值屬性的Bean被重建。

的index.xhtml

... 
<h:commandButton value="delete" action="bean.delete" /> 
... 

Bean.class

... 
public String delete() { 
    // do operations 
    return "index.xhtml?faces-redirect=true"; 
} 
... 
+0

感謝您的回答。但是,這只是導航到一個具體的觀點 - 不想我想(見問題的最後一句)。 – Lester

1

一個解決方案,我發現是

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

我不知道摧毀豆如果是這樣的方式因爲它僅僅通過 viewscoped bean破壞。這種情況並沒有那麼糟糕,但並不感覺乾淨。
我很欣賞這個或其他解決方案的任何想法。

+0

+1。視圖可供您通過名稱查詢和檢索特定的bean。作爲推論,你也可以通過名稱'刪除'一個豆 – kolossus