我正在开发一个web应用程序,使用jsf2,spring和hibernate。
我有一个具有JSF util方法的"应用程序范围"管理bean(称为"utilsJSF"),例如:
- 读取属性文件以从其key获取消息(使用getBundle)。
- 添加一个字符串作为facesmessage,稍后在视图中显示。 等
我将这个bean注入到我的"Base Controller"中(作为一个"managed property"),这样我所有的控制器都可以扩展这个bean,并且可以访问那些实用程序。在这里我没有问题。
但是,我如何从非"托管bean"的其他类中使用这些实用程序?
我将解释我自己:
我有一个异常层次结构,其中每个特定的异常类都必须访问一个资源束(属性文件),其中键是异常的名称,值是我要显示给用户的消息。异常构造函数从文件中获取值,将其存储在异常的字段中,然后控制器将消息作为facesmessage显示给用户。
我可以使用"utilsJSF"托管bean显示来自控制器的消息,因为我将它注入了BaseController。
但是为了使用它,我不能将"utilsJSF"注入异常类(因为异常类不是托管bean)。
解决这个问题的最好办法是什么?
您应该将所有这些实用程序方法(那些是(或可以是)public static
的)重构为真正的实用程序类,而不是将其保留在应用程序作用域bean中。
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));
}
// ...
}
这样你可以在任何地方使用它。为获取bundle消息创建一个类似的包。