我有一个助手类,它既不是stateful
managed bean
,也不是stateless
EJB
,也不是通过JPA
或Hibernate
映射到表的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')}" />