Сравнение строк с JSTL

У меня есть две строки, которые мне нужно сравнить, но даже если они имеют одинаковые значения или разные , это всегда вводит оператор...

<c:when test="#{bean.name1 != bean.name2}">
     fields that are supposed to appear _only_ when name1 is different from name2
</c:when>

6 ответов


проблема в том, что вы, вероятно, не обернули when в теге выбора.

если у вас есть:

    <c:choose>
    <c:when test="${bean.name1 != bean.name2}">
        fields that are supposed to appear _only_ when name1 is different from name2
    </c:when>
</c:choose>

Он будет работать


должно быть ?

<c:if test="#{bean.name1 != bean.name2}">
     // code
</c:if>

EDIT:<c:when> должен быть внутри <c:choose>. Не могу спросить почему, это просто синтаксис. Это как спрашивать, почему if не будет работать вместо switch в C / C++ / Java. Они просто разные животные.


имеет ли значение, если вы это сделаете:

<c:when test="${bean.name1 != bean.name2}">
     fields that are supposed to appear _only_ when name1 is different from name2
</c:when>

Я заметил некоторую неустойчивость при использовании c:if или c:choose и c:when внутри некоторых компонентов итерации jsf, таких как rich: datatable. Каков полный контекст?

в качестве обходного пути мне обычно нужно было бы обернуть вещи в a4j: outputPanel и соответственно установить атрибут визуализации.


должно быть поля, которые должны отображаться только когда name1 отличается от name2


попробуйте это...

<c:if test="${bean.name1 ne bean.name2}">
     fields that are supposed to appear _only_ when name1 is different from name2
</c:if>

ne = не равно

и

# должна быть $