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
ありがとう。
比較は、外部ではなく、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>
_