如何testingJSF中的枚举相等性?

有没有可能在JSF中testing枚举的平等?

例如, stuff是一个enum Stuff

 <h:outputText value="text" rendered="#{mrBean.stuff == mrsBean.stuff}"/> 

这实际上比JSF更相关的EL。 您发布的构造是有效的,但是您应该记住,EL 2.1中的枚举值实际上是作为String值计算的。 如果String.valueOf(mrBean.getStuff())等于String.valueOf(mrsBean.getStuff()) ,那么您的代码示例将呈现。 在EL 2.2中,相同的构造将起作用,但它们被评估为真正的枚举。

请注意,它确实需要一个getter方法来返回枚举值。 鉴于枚举被视为String的事实,你本质上也可以做:

 <h:outputText value="text" rendered="#{mrBean.stuff == 'FOO'}" /> 

在当前的EL 2.2版本中, 不能像这样直接访问枚举值:

 <h:outputText value="text" rendered="#{mrBean.stuff == Stuff.FOO}" /> 

这只有当你使用OmniFaces <o:importConstants>时才可能:

 <o:importConstants type="com.example.Stuff" /> ... <h:outputText value="text" rendered="#{mrBean.stuff == Stuff.FOO}" /> 

如果你有枚举

 public enum Status { YES, NO } 

你可以参考你的jsf页面中的枚举,如下所示:

 <h:outputText value="text" rendered="#{myBean.status == 'YES'}"/> 

我不太确定string评估,因为我偶然发现了一些代码来使用枚举:如果您的状态string中有一个错字,例如:

 <h:outputText value="text" rendered="#{myBean.status == 'YESSIR'}"/> 

当你点击页面时,你实际上会得到一个运行时错误,因为ELparsing器将试图将“YESSIR”强制转换为Status枚举并失败。

您可以在枚举上定义testing方法,请参阅以下源代码。

枚举定义:

 public enum MyEnum { FOO; public boolean isFoo(){ return FOO.equals(this); } } 

JSF代码:

 <h:outputText value="text" rendered="#{mrBean.stuff ne null and mrBean.stuff.foo}"/>