看起来像没有办法做到这一点干净。既然不能事先做,我选择了做另一个自定义标签,以确定对象继承的类:
添加了这个自定义标签:
<sorter:isOrderable items="${items}" var="isOrderable" />
所以,这可能工作:
<c:choose>
<c:when test="${isOrderable}" >
<sorter:sortByProperty items="${items}" var="items" property="ordinal"/>
</c:when>
<c:otherwise>
<sorter:sortByProperty items="${items}" var="items" property="name"/>
</c:otherwise>
</c:choose>
下面是实际检查Java代码文件:
public class IsOrderableTag extends TagSupport {
private static final long serialVersionUID = -842326085194300052L;
private String var;
private Collection<?> items;
@Override
public int doStartTag() throws JspException {
boolean isOrderable = false;
if (items != null && !items.isEmpty()) {
Object firstItem = items.iterator().next();
isOrderable = firstItem instanceof Orderable;
}
pageContext.setAttribute(var, isOrderable);
return SKIP_BODY;
}
//... getters and setters
}
这看起来似乎有点过分,但对我来说,我会在jsp上使用一些相当“杂乱”的代码(per @obourgain),或者使用Java进行更简洁的实现。我不会把这个标记为所选择的答案,因为问题是如何在jsp上使用jstl来做到这一点 - 如果你真的必须这样做 - 但这不是。但是,也许这是一个很好的替代别人处于与我处于同一位置的人)
您可能不应该在JSP中执行此操作。在您的servlet中执行并将其公开给JSP。 – 2015-02-23 18:04:06
同意,但这是传统代码。这是* many * jsp's使用的标签文件。我的手相当结合。 – LimaNightHawk 2015-02-23 18:27:06