我如何实现这一点,使常量既可以从支持bean也可以从XHTML文件访问?
在支持豆中,这显然很容易。因为它们只是Java类,所以与“常规” Java方法没有什么不同。您可以使用
enum或
public staticfinal字段。在观点上,这是一个不同的故事。在即将发布的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标记。



