JSF 2.1 - 获取 FacesContext 策略

标签 jsf managed-bean facescontext

我正在开发 Web 应用程序,其中我的 MVC Controller 是 JSF 2.1。我有几种基于

的方法

FacesContext.getCurrentInstance()

我用它来

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

示例:

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”,其中所有方法都是公共(public)和静态的

b) 创建父类(super class)“ManagedBean”,没有声明范围,也没有声明@ManagedBean 注释,但使用这些公共(public)方法。每个托管 bean 都应该是这些类的子级,因此它将继承这些方法。

最佳答案

建议使用实用程序类。您可以使用现有的 JSF 实用程序库,例如 OmniFaces,而不是重新创建自己的库。其中有 FacesMessages用于此目的的实用程序类。

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

确实可以将其抽象为“ super bean”,但这不可重用,并且您会在每个 JSF 项目中不断重复自己。此外,一个类只能从一个类扩展。因此,如果您的 bean 碰巧需要从另一个父类(super class)扩展,那么您就迷失了。

关于JSF 2.1 - 获取 FacesContext 策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14456951/

相关文章:

java - 应该同步哪些代码块?

jsf - 如何使用 JSF 2.3 和 TomEE 注入(inject) FacesContext?

jsf - p :signature 的较小显示

java - 特定错误消息未在 Primefaces 中呈现?

图表元素中的 JSF/primefaces 事件

eclipse - 使用注释时获取 EL 表达式的 JSF Managed Bean 实例

java threadlocal 单例 - 它是什么?

jsf-2 - FacesContext 和 ExternalContext 有什么区别

java - JSF 不更新变量

java - JSF h :selectManyCheckbox inside ui:repeat via Map entry