我尝试使用以下标记-libs显示带有@Entity信息的简单表格:
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
这里是映射的实体属性,布尔值:
@NotNull
@Column(name = "ACTIVE", columnDefinition = "BIT", length = 1)
private boolean active;
//... getters and setters
public boolean getActive() {
return active;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active= active;
}
ps。:通过调试支持bean,我得到了所需的列表。
这是我的.xhtml(jsf页)代码段:
<ui:repeat var="u" value="#{usersList}">
<tr>
<td>#{u.name}</td>
<td>#{u.login}</td>
<td>#{u.email}</td>
<td>
<c:choose>
<c:when test="${u.active}">
<span style="color: green" class="glyphicon glyphicon-ok"></span>
</c:when>
<c:otherwise>
<span style="color: red"
class="glyphicon glyphicon-remove"></span>
</c:otherwise>
</c:choose>
</td>
</tr>
</c:when>
</ui:repeat>
如果列表不为空,则显示空消息,并且不显示任何行。
如果我强制显示行,删除条件渲染,我会收到以下错误:
java.lang.IllegalArgumentException: Cannot convert 1 of type class java.lang.Long to class java.lang.Boolean
属性有效。
我在问之前尝试了一些解决方案,如下:
How does Java expression language resolve boolean attributes? (in JSF 1.2)
javax.el.PropertyNotFoundException when trying to resolve Boolean properties in EL
更新1 :查看我的代码,我意识到我为空测试一个对象,而不是一个列表,也更新了我的代码段,因此,显示行的条件现在好了,但活动属性问题,仍然抛出错误。
答案 0 :(得分:0)
问题是JSF标签(例如ui:repeat
)在不同的(稍后)阶段评估,然后是JSTL标签(例如c:when
)。因此,在评估c:when
语句时,您的用户列表的值不可用。有时这会导致奇怪的行为,因此看起来值可用。请查看this answer以获取一些详细信息。
您应该使用某些JSF组件的呈现属性:
<c:choose>
<c:when test="${u.active}">
<span style="color: green" class="glyphicon glyphicon-ok"></span>
</c:when>
<c:otherwise>
<span style="color: red" class="glyphicon glyphicon-remove"></span>
</c:otherwise>
</c:choose>
变成:
<h:panelGroup rendered="#{u.active}">
<span style="color: green" class="glyphicon glyphicon-ok"></span>
</h:panelGroup>
<h:panelGroup rendered="#{not u.active}">
<span style="color: red" class="glyphicon glyphicon-remove"></span>
</h:panelGroup>
你也可以将它用于这样的值:
<h:outputText rendered="#{u.active}" value="#{u.name}" />
另见: