web-dev-qa-db-ja.com

JSTL <c:if test = "$ {values.type} == 'object'">の値を比較するための正しい構文

JSTLで実行しようとしているifステートメントがあります。

私のコードは以下のとおりです(変数の値はユーザー定義のオブジェクトを含むArrayListであり、タイプはそのオブジェクトのプライベートプロパティであり、パブリックのgetter/setterメソッドです):

<c:forEach items="${list}" var="values">
    <c:if test="${values.type}=='object'">
        <!-- code here -->
    </c:if>
</c:forEeach>

test属性内のパーツの正しい構文は何でしょうか。ドキュメントは実際にはその部分を助けません http://download.Oracle.com/javaee/5/jstl/1.1/docs/tlddocs/index.html

ありがとう。

17
Ankur

比較は、外部ではなく、EL _${ ... }_内で完全に評価する必要があります。

_<c:if test="${values.type eq 'object'}">
_

ドキュメントに関しては、これらの_${}_のことはJSTLではなく、それ自体が主題であるEL(Expression Language)です。 JSTL(他のすべてのJSP taglibと同様)はそれを利用しています。 ELの例 はこちら にあります。

_<c:if test="#{bean.booleanValue}" />
<c:if test="#{bean.intValue gt 10}" />
<c:if test="#{bean.objectValue eq null}" />
<c:if test="#{bean.stringValue ne 'someValue'}" />
<c:if test="#{not empty bean.collectionValue}" />
<c:if test="#{not bean.booleanValue and bean.intValue ne 0}" />
<c:if test="#{bean.enumValue eq 'ONE' or bean.enumValue eq 'TWO'}" />
_

こちらもご覧ください:


ちなみに、具体的な問題とは関係なく、意図が正しいと思う場合は、 Object#getClass() を呼び出してから Class#getSimpleName() カスタムgetterを追加する代わりに。

_<c:forEach items="${list}" var="value">
    <c:if test="${value['class'].simpleName eq 'Object'}">
        <!-- code here -->
    </c:if>
</c:forEeach>
_

こちらもご覧ください:

43
BalusC