如何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}"/>