Подтвердить что ты не робот

Правильный синтаксис для сравнения значений в JSTL <c: if test = "$ {values.type} == 'object'" >

У меня есть оператор if, который я пытаюсь выполнить с JSTL.

Мой код ниже (значения переменных - это ArrayList, который содержит определенный пользователем объект, а type - частное свойство этого объекта с общедоступными методами 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

Спасибо.

4b9b3361

Ответ 1

Сравнение должно быть полностью оценено внутри EL ${ ... }, а не снаружи.

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

Что касается документов, те ${} вещи не JSTL, а EL (язык выражений), который является целым предметом сам по себе. JSTL (как и любой другой тег-словарь JSP) просто использует его. Вы можете найти еще несколько примеров 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() вместо добавления пользовательского получателя.

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

См. также: