如何注释助手 class 在 JSF 中可见?
How to annotate helper class to be visible inside JSF?
我有一个帮手 class,它既不是 stateful
managed bean
,也不是 stateless
EJB
,也不是 entity
通过 JPA
或 Hibernate
映射到 table。它只是静态方法的集合,可以做一些简单的事情,比如 return 日期格式和类似的东西。
考虑到,为了使 Java class 在 JSF 中可见,class 必须以容器分配为对 JSF 可见的方式进行注释,有没有办法注释一个不匹配任何标准 JSF 可见类别的助手 class 以便它变得可见?当然,另一种方法是在托管 bean 中使用管道方法,将调用从 JSF 传递给助手 class,但如果我可以直接从 JSF 调用它,我不想弄乱我的托管 bean。我知道使用来自 JSF 的无状态 EJB 执行此操作将被视为反模式,但我希望使用的 class 中的方法都非常简单且非事务性。
将您的 class 标记为 @ApplicationScoped
。确保它有一个 public 无参数构造函数并且这个 class 没有状态并且它的方法是线程安全的。
例如
托管 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')}" />
我有一个帮手 class,它既不是 stateful
managed bean
,也不是 stateless
EJB
,也不是 entity
通过 JPA
或 Hibernate
映射到 table。它只是静态方法的集合,可以做一些简单的事情,比如 return 日期格式和类似的东西。
考虑到,为了使 Java class 在 JSF 中可见,class 必须以容器分配为对 JSF 可见的方式进行注释,有没有办法注释一个不匹配任何标准 JSF 可见类别的助手 class 以便它变得可见?当然,另一种方法是在托管 bean 中使用管道方法,将调用从 JSF 传递给助手 class,但如果我可以直接从 JSF 调用它,我不想弄乱我的托管 bean。我知道使用来自 JSF 的无状态 EJB 执行此操作将被视为反模式,但我希望使用的 class 中的方法都非常简单且非事务性。
将您的 class 标记为 @ApplicationScoped
。确保它有一个 public 无参数构造函数并且这个 class 没有状态并且它的方法是线程安全的。
例如
托管 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')}" />