在JSF中有一个“常量”类

时间:2012-10-01 06:08:54

标签: java jsf primefaces constants el

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

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

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

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

1 个答案:

答案 0 :(得分:13)

  

如何实现这一点,从后台bean和XHTML文件中访问常量?

在支持豆子方面,这显然很容易。因为它们只是Java类,所以它与“普通”Java方式没有什么不同。您可以使用enumpublic static final字段。在观点中,这是一个不同的故事。直到即将发布的3.0版本,EL确实不支持常量。

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

<h:someComponent ... rendered="#{order.status == 'SHIPPING'}" />

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

<o:importConstants type="com.example.OrderStatus" />
<h:someComponent ... rendered="#{order.status == OrderStatus.SHIPPING}" />

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

在即将发布的EL 3.0(JSR-341,Java EE 7的一部分)中,可以用相同的方式引用常量。另请参阅How to reference constants in EL?这只需要以编程方式导入常量,因为没有标准的JSP / Facelets标记。