如何注释helper类以便在JSF中可见



我有一个助手类,它既不是stateful managed bean,也不是stateless EJB,也不是通过JPAHibernate映射到表的entity。它只是一个静态方法的集合,可以做一些简单的事情,比如返回日期格式和类似的事情。

鉴于此,为了使Java类在JSF中可见,该类必须以容器指定为JSF可见的方式进行注释,是否有一种方法可以注释不匹配任何标准JSF可见类别的helper类,从而使其可见?当然,另一种方法是在托管bean中使用一个管道方法,将JSF的调用传递给助手类,但是如果可以直接从JSF调用托管bean,我希望不要使它变得混乱。我明白,使用JSF中的无状态EJB来执行此操作会被认为是一种反模式,但是我希望使用的类中的方法都非常简单且是非事务性的。

标记你的类为@ApplicationScoped。确保它有一个公共的无参数构造函数,并且这个类没有状态,它的方法是线程安全的。

托管bean(纯JSF)

//this is important
import javax.faces.bean.ApplicationScoped;
@ManagedBean
@ApplicationScoped
public class Utility {
    public static String foo(String another) {
        return "hello " + another;
    }
}

CDI版本

//this is important
import javax.enterprise.context.ApplicationScoped;
@Named
@ApplicationScoped
public class Utility {
    public static String foo(String another) {
        return "hello " + another;
    }
}
视图

<h:outputText value="#{utility.foo('amphibient')}" />

最新更新