是否可以在 JSF 中测试枚举相等性?
例如其中 stuff
是一个 enum Stuff
:
<h:outputText value="text" rendered="#{mrBean.stuff == mrsBean.stuff}"/>
最佳答案
这实际上与 EL 相关,而不是与 Faces 相关。您发布的构造是有效的,但您应该记住,枚举值在 EL 2.1 或更早版本中实际评估为 String
值(value)观。如果String.valueOf(mrBean.getStuff())
等于 String.valueOf(mrsBean.getStuff())
,然后您的代码示例将呈现。在 EL 2.2 或更高版本中,相同的构造将起作用,但它们被评估为真正的枚举。
请注意,它确实需要一个 getter 方法来返回枚举值。鉴于枚举被视为 String
,本质上你也可以这样做:
<h:outputText value="text" rendered="#{mrBean.stuff == 'FOO'}" />
在 EL 中,您无法直接访问枚举值,如下所示:
<h:outputText value="text" rendered="#{mrBean.stuff == Stuff.FOO}" />
这仅在您使用 Faces 2.3 引入的 <f:importConstants>
时才可能实现。标签:
<f:metadata>
<f:importConstants type="com.example.Stuff" />
</f:metadata>
...
<h:outputText value="text" rendered="#{mrBean.stuff == Stuff.FOO}" />
或者当您尚未使用 Faces 2.3 或当您不想使用 <f:metadata>
时,使用 OmniFaces 前身 <o:importConstants>
:
<o:importConstants type="com.example.Stuff" />
...
<h:outputText value="text" rendered="#{mrBean.stuff == Stuff.FOO}" />
关于jsf - 如何测试 JSF 中的枚举相等性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2524420/