JSTL: c: forEach гарантирует порядок списков в JSP? - PullRequest
2 голосов
/ 12 января 2012

Мой JSP содержит следующий фрагмент:

<c:forEach items="${rulesForm.rules}" var="rule" varStatus="counter">
        <tr id="rules${counter.index}" name="rules[${counter.index}]">

"правила" само по себе является List<Rule>.

Когда я передаю свой ModelAndView объект обратно из Spring MVC Controller, я вижу, что мой список находится в правильном порядке.

Однако, когда он отображается на экране, порядок несколько случайный. У меня также есть JavaScript, который выполняет некоторые модификации в DOM, но я не вижу, чтобы это делало какие-либо изменения порядка. Поэтому мне интересно, является ли c:forEach виновником?

Ответы [ 2 ]

3 голосов
/ 12 января 2012

Бьюсь об заклад <c:forEach/> использует Iterator в большинстве реализаций, поэтому он опирается на базовый порядок сбора. Таким образом, если вы передадите List, порядок будет сохранен, что неверно для Set с.

Хотя в документации не указано, что:

items [...] Коллекция элементов для повторения.

Подумайте об этом - если бы порядок упорядоченного сбора не был сохранен, любая сортировка результатов на стороне сервера не имела бы смысла.

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

Итерация будет зависеть от типа пройденного List. Так что вам придется проверять документы этого типа List.

...