看起來像沒有辦法做到這一點乾淨。既然不能事先做,我選擇了做另一個自定義標籤,以確定對象繼承的類:
添加了這個自定義標籤:
<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