2

我正在开发我的 MVC 控制器是 JSF 2.1 的 webapp。我有几种基于

FacesContext.getCurrentInstance()

我用这个来

  • 从 Flash 范围放置/检索值
  • 在视图中添加消息
  • 获取请求参数映射

例子:

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 都应该是这些类的子类,因此它将继承这些方法。

4

2 回答 2

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 碰巧需要从另一个超类扩展,那么您就迷路了。

于 2013-01-22T11:58:13.113 回答
0

我会为此目的推荐一个实用程序类,因为您允许灵活地扩展其他有用的类,例如那些具有一些您希望在其他 bean 之间共享的公共逻辑的类。

话虽如此,一个 JSFUtils 类可能会随着时间的推移而变得非常混乱,其中包含许多方法,并且可能变得非常难以管理。最好对 util 方法进行分类并将它们放在单独的静态实用程序类中。

于 2013-01-22T12:16:05.340 回答