小编典典

使用 用枚举

jsp

我有一个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属性的支持bean 。有人告诉我将枚举与字符串进行比较并使用==运算符,但这也许不是这样。

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


阅读 177

收藏
2020-06-08

共1个答案

小编典典

项目对象( 在ICEFaces数据表内部

然后,JSTL确实不起作用。它在视图构建时运行,而不是在视图渲染时运行。基本上,您可以将其可视化如下:JSTL首先从上到下运行,然后将包含JSF标记的生成结果仅移交给JSF,而JSF又从上到下运行。当JSTL遇到迭代的JSF数据表时#{item},它就是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'}" />
2020-06-08