与枚举一起使用

2023-12-05

我有一个 JSP portlet,需要根据枚举类型的 bean 属性的值显示不同的标记

public enum State {
    CANCELED, COMPLETED
}

我使用以下代码来进行切换

<c:choose>
    <c:when test="#{item.state == 'COMPLETED'}">
        <img src="ok.gif" />
    </c:when>
    <c:when test="#{item.state == 'CANCELED'}">
        <img src="ko.gif" />
    </c:when>
</c:choose>

但它不起作用。有趣的是,在这两种情况下它都返回 false。 item 对象(在 ICEFaces 数据表内)是一个带有Stategetter+setter 属性。 有人告诉我将枚举与字符串进行比较并使用==运算符,但也许不是这样。

所以,我的问题是:我该如何使用&lt;c:when&gt;标签将属性与枚举值进行比较?


... 项目对象 (ICEFaces 数据表内) ...

那么JSTL确实不行。它在视图构建期间运行,而不是在视图渲染期间运行。基本上,您可以将其可视化如下:JSTL 首先从上到下运行,然后将生成的包含 JSF 标记的结果仅交给 JSF,JSF 又从上到下运行。此时 JSTL 遇到迭代的 JSF 数据表#{item}, it is null因此它总是会评估false并且 JSF 不会从 JSTL 检索这些图像。

您想改用 JSF 标记。我建议<h:graphicImage>结合rendered属性。

<h:graphicImage value="ok.gif" rendered="#{item.state == 'COMPLETED'}" />
<h:graphicImage value="ko.gif" rendered="#{item.state == 'CANCELED'}" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与枚举一起使用 的相关文章

随机推荐