8

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

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

我曾尝试使用@ApplicationScoped和使用单例模式(单例类),但由于范围问题,我无法使其正常工作。

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

4

1 回答 1

13

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

在支持 bean 中,这显然很容易。由于它们只是 Java 类,因此与“普通”Java 方式没有什么不同。您可以使用enums 或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 标记。

于 2012-10-01T11:39:48.997 回答