Java 如何在JSTL中检查对象是字符串还是集合?

Java 如何在JSTL中检查对象是字符串还是集合?,java,jstl,Java,Jstl,我正在使用JSTL,希望检查对象是字符串还是集合 <c:if test="${fn:length(item)>1}"> <c:out value="${fn:length(item)} " /> </c:if> fn:length返回两种类型的结果(stringsize或集合中的元素数) 我如何确定我得到了哪一个呢?您可以查看类名。例如: <c:if test="${item.class.simpleName == 'String'}"

我正在使用JSTL,希望检查对象是字符串还是集合

<c:if test="${fn:length(item)>1}">
   <c:out value="${fn:length(item)} " />
</c:if>
fn:length返回两种类型的结果(stringsize或集合中的元素数)



我如何确定我得到了哪一个呢?

您可以查看类名。例如:

<c:if test="${item.class.simpleName == 'String'}">
   <!-- it's a String! -->
</c:if>

item.class与tomcat 7一起使用时会导致错误。 对我来说,这很管用(虽然更脏):


如果需要区分某个对象是否为集合,可以使用迭代来确定它是否为集合,并设置一个变量。这对我很有用:

<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 -->


由于Tomcat的较新版本,接受的答案对我不起作用,但这确实起了作用。非常感谢。这实际上不起作用,因为返回的
getClass().simpleName
不是字符串,而是
java.util.LinkedHashMap$Entry
@gene:OP主要是检查项是字符串还是其他内容。对于OP来说,它工作得非常好。
<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 -->