在JSF中有一个"常量"类

jav*_*aMS 8 java jsf constants el primefaces

我正在使用JSF/Primefaces构建一个Web应用程序.我需要一个"常量"类,即一个由常量组成的类.这些常量主要是将在整个应用程序中使用的导航命令.我这样做的原因是为了避免在ad-hoc基础上实例化字符串.

我如何实现这一点,使得可以从支持bean和XHTML文件访问常量?

我尝试过使用@ApplicationScoped和使用Singleton模式(Singleton类),但由于范围问题,我无法使用它.

或许我只是使用错误的方法.欢迎任何想法/建议.

Bal*_*usC 13

我如何实现这一点,使得可以从支持bean和XHTML文件访问常量?

在支持豆类方面,这显然很容易.因为它们只是Java类,所以它与"普通"Java方式没有什么不同.你可以使用enums或public static final字段.在观点中,这是一个不同的故事.在即将发布的3.0版之前,EL确实不支持任何方式的常量.

我建议使用枚举,因为EL在字符串比较中对它们有隐含的支持.它不执行任何编译时/运行时类型安全检查,但您可以将枚举名称用作字符串.例如

<h:someComponent ... rendered="#{order.status == 'SHIPPING'}" />
Run Code Online (Sandbox Code Playgroud)

如果您更喜欢自我记录代码和运行时检查(不,无法进行编译时检查),那么您可以考虑使用OmniFaces <o:importConstants>.

<o:importConstants type="com.example.OrderStatus" />
<h:someComponent ... rendered="#{order.status == OrderStatus.SHIPPING}" />
Run Code Online (Sandbox Code Playgroud)

这对IMO来说只是有点笨拙.但是在开发期间运行时检查很好.输入错误很容易被监督.

在即将推出的EL 3.0(JSR-341,Java EE 7的一部分)中,可以以相同的方式引用常量.另请参见如何在EL中引用常量?这只需要以编程方式导入常量,因为没有标准的JSP/Facelets标记.