我正在开发webapp,我的MVC控制器是JSF 2.1。我有几种基于
的方法FacesContext.getCurrentInstance()
我用它来
的示例:
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上使用它,在哪里放置这个方法的适当位置?我考虑两个选择:
a)创建类“JSFUtils”,其中所有方法都是公共的和静态的
b)创建超类“ManagedBean”,没有声明的范围,也没有声明的@ManagedBean注释,但使用这些公共方法。每个托管bean都应该是这些类的子代,因此它将继承这些方法。
答案 0 :(得分:3)
推荐的方法是实用程序类。您可以使用现有的JSF实用程序库,例如具有OmniFaces和Faces
实用程序类的Messages
来实现此目的,而不是重新构建您自己的库。
String foo = Faces.getRequestParameter("foo");
Messages.create(summary).detail(detail).add();
Messages.addGlobalInfo(summary); // Without detail.
Faces.setFlashAttribute(key, value);
你可以确实也将它抽象为“超级bean”,但这不是可重用的,你会在每个JSF项目中不断重复自己。此外,一个类只能从一个类扩展。因此,如果您的bean碰巧需要从另一个超级类扩展,那么您就丢失了。
答案 1 :(得分:0)
我建议使用实用程序类,因为您可以灵活地扩展其他有用的类,例如那些具有一些您希望在其他bean之间共享的通用逻辑的类。
话虽如此,JSFUtils类可能会随着时间的推移而变得非常混乱,并且可能变得非常难以管理。最好对util方法进行分类,并将它们放在单独的静态实用程序类中。