【发布时间】:2011-08-10 16:01:49
【问题描述】:
我正在使用 JSTL,想检查一个对象是字符串还是集合。
fn:length 返回两种类型的结果(字符串大小或集合中元素的数量)。
<c:if test="${fn:length(item)>1}">
<c:out value="${fn:length(item)} " />
</c:if>
我如何确定我得到了哪一个?
【问题讨论】:
我正在使用 JSTL,想检查一个对象是字符串还是集合。
fn:length 返回两种类型的结果(字符串大小或集合中元素的数量)。
<c:if test="${fn:length(item)>1}">
<c:out value="${fn:length(item)} " />
</c:if>
我如何确定我得到了哪一个?
【问题讨论】:
你可以看看类名。例如:
<c:if test="${item.class.simpleName == 'String'}">
<!-- it's a String! -->
</c:if>
【讨论】:
item.class 与 tomcat 7 一起使用时会导致错误。 对我来说这很有效(虽然它更脏):
${item.link.getClass().simpleName == 'String'}
【讨论】:
getClass().simpleName 是 不是 字符串,而是 java.util.LinkedHashMap$Entry。
如果你需要区分某个东西是否是一个Collection,你可以使用迭代来判断它是否是一个Collection,并设置一个var。这对我有用:
<c:set var="collection" value="false" />
<c:forEach var="item" items="${yourObjectWhichMayBeCollection}" varStatus="row">
<c:if test="${row.index > 0}">
<c:set var="collection" value="true" />
</c:if>
</c:forEach>
<!--Now you can examine ${collection} & decide e.g. Collection vs. String -->
【讨论】: