我正在使用 JSF/Primefaces 构建一个 Web 应用程序。我需要有一个“常量”类,即一个由常量组成的类。这些常量主要是将在整个应用程序中使用的导航命令。我这样做的原因是避免临时实例化字符串。
我如何实现这一点,使常量可以从支持 bean 和 XHTML 文件中访问?
我曾尝试使用@ApplicationScoped
和使用单例模式(单例类),但由于范围问题,我无法使其正常工作。
或者,也许我只是使用了错误的方法。欢迎任何想法/建议。
我正在使用 JSF/Primefaces 构建一个 Web 应用程序。我需要有一个“常量”类,即一个由常量组成的类。这些常量主要是将在整个应用程序中使用的导航命令。我这样做的原因是避免临时实例化字符串。
我如何实现这一点,使常量可以从支持 bean 和 XHTML 文件中访问?
我曾尝试使用@ApplicationScoped
和使用单例模式(单例类),但由于范围问题,我无法使其正常工作。
或者,也许我只是使用了错误的方法。欢迎任何想法/建议。
我如何实现这一点,使常量可以从支持 bean 和 XHTML 文件中访问?
在支持 bean 中,这显然很容易。由于它们只是 Java 类,因此与“普通”Java 方式没有什么不同。您可以使用enum
s 或public static final
字段。在视图中,这是一个不同的故事。在即将发布的 3.0 版本之前,EL 不以任何方式支持常量。
我建议使用枚举,因为 EL 在字符串比较中对它们具有隐式支持。它不执行任何编译时/运行时类型安全检查,但您可以将枚举名称用作字符串。例如
<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 的一部分)中,可以以相同的方式引用常量。另请参阅如何在 EL 中引用常量?这只需要以编程方式导入常量,因为没有标准的 JSP/Facelets 标记。