如何在JSF中测试枚举相等?

DD.*_*DD. 49 jsf enums el

是否有可能在JSF中测试枚举相等性?

例如当stuffenum Stuff:

<h:outputText value="text" rendered="#{mrBean.stuff == mrsBean.stuff}"/>
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 94

这实际上比与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'}" />
Run Code Online (Sandbox Code Playgroud)

在当前的EL 2.2版本中,您无法直接访问枚举值,如下所示:

<h:outputText value="text" rendered="#{mrBean.stuff == Stuff.FOO}" />
Run Code Online (Sandbox Code Playgroud)

只有在使用OmniFaces<o:importConstants>时才可以这样:

<o:importConstants type="com.example.Stuff" />
...
<h:outputText value="text" rendered="#{mrBean.stuff == Stuff.FOO}" />
Run Code Online (Sandbox Code Playgroud)


Nag*_*alf 37

如果你有枚举

public enum Status {
    YES, NO
}
Run Code Online (Sandbox Code Playgroud)

您可以像这样引用jsf页面中的枚举:

<h:outputText value="text" rendered="#{myBean.status == 'YES'}"/>
Run Code Online (Sandbox Code Playgroud)

由于我在重构一些代码以使用枚举时遇到了一些错误,我对String评估不太确定:如果你的状态字符串中有拼写错误,即:

<h:outputText value="text" rendered="#{myBean.status == 'YESSIR'}"/>
Run Code Online (Sandbox Code Playgroud)

当您点击页面时,实际上会遇到运行时错误,因为EL解析器会尝试将"YESSIR"强制转换为Status枚举并失败.