2013-01-22 81 views
2

我正在開發webapp,其中我的MVC控制器是JSF 2.1。我有一個基於JSF 2.1 - 獲取FacesContext策略

FacesContext.getCurrentInstance()

我使用它來

  • PUT /從Flash範圍檢索值
  • 上查看
  • 添加信息的幾種方法
  • 得到請求PARAMS地圖

例子:

public void addInfoMessage(String title, String description){ 
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,title, description)); 
} 

public void putFlashMessage(String code, String value){ 
    FacesContext.getCurrentInstance().getExternalContext().getFlash().put(code, value); 
} 

我只是想知道哪裏是如果我用這對每一個託管bean來把這個方法合適的地方?我認爲兩個選項:

一)創建類「JSFUtils」,所有的方法都是公共的和靜態

二)打造超一流的「ManagedBean」無申報範圍和申報不標註@ManagedBean,但這些公共方法。每個託管bean都應該是這些類的子項,所以它將繼承這些方法。

回答

3

實用程序類是推薦的方法。您可以使用現有的JSF實用程序庫(如OmniFaces,其中有FacesMessages實用程序類用於此目的),而不是重新創建自己的實用程序。

String foo = Faces.getRequestParameter("foo"); 
Messages.create(summary).detail(detail).add(); 
Messages.addGlobalInfo(summary); // Without detail. 
Faces.setFlashAttribute(key, value); 

可以的確也是抽象它拿走作爲「超級豆」,但這是不能重複使用,你會不停地重複自己在每一個JSF項目。而且,一個類只能從一個類擴展。所以如果你的bean碰巧需要從另一個超類擴展,那麼你就會迷失方向。

+0

您的評論很好,你說服了我,謝謝:) – Cichy

+0

不客氣。 – BalusC

0

我會爲此目的推薦一個實用程序類,因爲您可以靈活地擴展其他有用的類,例如那些具有您希望在其他bean中共享的一些共同邏輯的類。儘管如此,一個JSFUtils類可能會隨着時間的推移而變得非常混亂,並且可能會變得非常難以管理。最好將util方法分類並將它們放入單獨的靜態實用程序類中。