我正在使用jsf2,spring和hibernate开发一个Web应用程序。
我有一个带有JSF util方法的“应用范围”托管bean(称为“utilsJSF”),例如:
我将这个bean注入我的“基本控制器”(作为“托管属性”),以便我的所有控制器都扩展这个,并可以访问这些实用程序。我没有问题。
但是,如何从其他不是“托管bean”的类中使用这些实用程序?
我会解释自己:
我有一个异常层次结构,其中每个特定的异常类都必须访问资源包(属性文件),其中键是异常的名称,值是我要向用户显示的消息。异常构造函数从文件中获取值,将其存储在异常的字段中,然后控制器将消息作为facesmessage显示给用户。
我可以使用“utilsJSF”托管bean显示来自控制器的消息,因为我将它注入BaseController。
但我不能将“utilsJSF”注入到异常类中以便使用它(因为异常类不是托管bean)。
解决这个问题的最佳解决方案是什么?
答案 0 :(得分:2)
您应该将所有这些实用工具方法(那些(或可能是)public static
)重构为真正的实用程序类,而不是将其保留在应用程序范围的bean中。< / p>
public final class Faces {
private Faces() {
// Prevent construction.
}
public static void addGlobalInfoMessage(String summary) {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_INFO, summary, null));
}
// ...
}
这样你就可以随处使用它。创建一个类似的获取捆绑消息。