Сравните значения списка в <c: if> - PullRequest
0 голосов
/ 13 января 2012

Мне нужно перебрать определенный список строк, относящихся к столбцу базы данных, который имеет тип Integer. Этот столбец в базе данных является внешним ключом идентификатора родительского столбца в той же таблице.

Я должен сопоставить оба эти значения и распечатать в JSP, если есть совпадение.

Я прошел по этой ссылке Оцените список.содержит строку в JSTL и пытался заставить ее работать. Я не знаю, где именно я ошибся.

Вот что у меня есть:

<c:forEach var="List" items="${Section.LangList}">
    <c:if test="${List['Lang'] == List['Id']}">
        ...
    </c:if> 
</c:forEach>    

Это одна из вещей, которую я использовал для сравнения значений. Я пробовал contains и <c:set> тоже. Я что-то упускаю?

Ответы [ 2 ]

2 голосов
/ 13 января 2012

Вам необходимо начинать имена свойств со строчной буквы.${Section.LangList} не будет работать, оно должно быть ${Sections.langList}.

<c:forEach var="List" items="${Section.langList}">
    <c:if test="${List['Lang'] == List['Id']}">
        ...
    </c:if> 
</c:forEach> 

Если это все еще не работает, другая возможная причина состоит в том, что тип данных обеих сторон различен, дажехотя они содержат одинаковое значение.Например, String значение "42" против Integer значение 42.Вы должны убедиться, что типы данных совпадают.


Не имеет отношения к конкретной проблеме, ваше соглашение об именах ужасно.Каждый элемент List<Language>, безусловно, не является другим List, но, вероятно, классом Language.Кроме того, использование скобки для доступа к свойству с фиксированным именем не требуется.Просто используйте обозначение ${bean.property}.Следующее сделает ваш код более соответствующим соглашениям о присвоении имен и более самодокументируемым:

<c:forEach var="language" items="${section.languages}">
    <c:if test="${language.lang == language.id}">
        ...
    </c:if> 
</c:forEach> 

Мне все еще интересно, как ${language.lang} имеет смысл в этом контексте.

0 голосов
/ 13 января 2012

попробуйте что-то вроде этого:

<c:forEach var="item" items="${Section.LangList}">                   
    <c:if test="${item.lang eq item.id}">
        .....
    </c:if>
</c:forEach>    

если это не сработает, покажите нам класс, который находится в итеративном списке

...