gpt4 book ai didi

java - 使用 with an enumeration

转载 作者:行者123 更新时间:2023-11-29 08:15:39 25 4
gpt4 key购买 nike

我有一个 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。项目对象(在 ICEFaces 数据表内)是一个具有 State getter+setter 属性的辅助 bean。有人告诉我将枚举与字符串进行比较并使用 == 运算符,但也许不是这样。

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

最佳答案

... The item object (inside an ICEFaces data table) ...

那么JSTL确实不行。它在 View 构建期间运行,而不是在 View 渲染期间运行。基本上可以这样形象化: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'}" />

关于java - 使用 <c :when> with an enumeration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5093861/

25 4 0