JSF应用程序作用域管理bean注入

时间:2011-12-06 20:04:42

标签: jsf scope javabeans managed

我正在使用jsf2,spring和hibernate开发一个Web应用程序。

我有一个带有JSF util方法的“应用范围”托管bean(称为“utilsJSF”),例如:

  • 读取属性文件以从其键获取消息(使用getBundle)。
  • 添加一个字符串作为facesmessage,稍后将在视图中显示。

我将这个bean注入我的“基本控制器”(作为“托管属性”),以便我的所有控制器都扩展这个,并可以访问这些实用程序。我没有问题。

但是,如何从其他不是“托管bean”的类中使用这些实用程序?

我会解释自己:

我有一个异常层次结构,其中每个特定的异常类都必须访问资源包(属性文件),其中键是异常的名称,值是我要向用户显示的消息。异常构造函数从文件中获取值,将其存储在异常的字段中,然后控制器将消息作为facesmessage显示给用户。

我可以使用“utilsJSF”托管bean显示来自控制器的消息,因为我将它注入BaseController。

但我不能将“utilsJSF”注入到异常类中以便使用它(因为异常类不是托管bean)。

解决这个问题的最佳解决方案是什么?

1 个答案:

答案 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));
    }

    // ...
}

这样你就可以随处使用它。创建一个类似的获取捆绑消息。