如何测试 JSF 中的枚举相等性?
是否可以在 JSF 中测试枚举相等性?
例如,其中 stuff
是一个 enum Stuff
:
<h:outputText value="text" rendered="#{mrBean.stuff == mrsBean.stuff}"/>
Is it possible to test for enum equality in JSF?
E.g. where stuff
is an enum Stuff
:
<h:outputText value="text" rendered="#{mrBean.stuff == mrsBean.stuff}"/>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这实际上与 EL 相关,而不是与 Faces 相关。您发布的构造是有效的,但您应该记住,EL 2.1 或更早版本中的枚举值实际上被评估为
String
值。如果String.valueOf(mrBean.getStuff())
等于String.valueOf(mrsBean.getStuff())
,则您的代码示例将呈现。在 EL 2.2 或更高版本中,相同的构造将起作用,但它们被评估为真正的枚举。请注意,它确实需要一个 getter 方法来返回枚举值。鉴于枚举被视为
String
,您本质上也可以这样做:在 EL 中,您不能像这样直接访问枚举值:
这只有当您使用 Faces 2.3 引入的
标签:或者,当您尚未使用 Faces 2.3 或不想使用
时,请使用 OmniFaces 前置器
:This is actually more EL related than Faces related. The construct as you posted is valid, but you should keep in mind that enum values are in EL 2.1 or older actually evaluated as
String
values. IfString.valueOf(mrBean.getStuff())
equalsString.valueOf(mrsBean.getStuff())
, then your code example will render. In EL 2.2 or newer the same construct will work, but they are evaluated as true enums.Note that it indeed requires a getter method to return the enum value. Given the fact that enums are treated as
String
, you can in essence also just do:In EL, you cannot access enum values directly like this:
This is only possible when you use Faces 2.3-introduced
<f:importConstants>
tag:Or when you're not on Faces 2.3 yet or when you don't want to use
<f:metadata>
, use the OmniFaces predecesor<o:importConstants>
:如果您有枚举,
您可以像这样在 jsf 页面中引用枚举:
我不太确定字符串评估,因为我在重构一些代码以使用枚举时偶然发现了一些事情:如果您的状态中有拼写错误String,即:
当您点击该页面时,您实际上会收到运行时错误,因为 EL 解析器会尝试将“YESSIR”强制转换为
Status
枚举并失败。If you have the enum
you can reference the enums in your jsf pages like so:
I'm not so sure about the String evaluation, due to something I stumbled upon while refactoring some code to use enums: if you have a typo in your status String, ie:
you will actually get a runtime error when you hit the page because the EL parser will try to coerce 'YESSIR' into a
Status
enum and fail.您可以在枚举上定义测试方法,请参阅以下来源。
枚举定义:
JSF 代码:
You could define testing methods on the enum, see the following source.
Enum definition:
JSF code: