Jsf всегда удаляет последний элемент из ArrayList - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть ArrayList в компоненте поддержки и его рендеринг на JSF-странице с c:forEach. Когда iI удаляет элемент ArrayList по индексу, jsf, независимо от того, какой это индекс, всегда удаляет последний элемент. Почему это происходит?

Кнопка удаления в JSF:

<a4j:commandButton immediate="true" action="#{bean.removeEntry}" ...

Так что я использую немедленный атрибут. Я думаю, что проблема в том, что сразу же пропускается фаза запроса в жизненном цикле JSF. Возможно?

Если да, то как запустить фазу применения запроса в этом случае?

Ответы [ 3 ]

1 голос
/ 10 февраля 2012

Используете ли вы Facelets (.xhtml страниц)? Если это так, вы можете столкнуться с некоторыми распространенными заблуждениями о тегах JSTL, такими как <c:foreach>. Вот хорошая статья об этом:

http://www.ninthavenue.com.au/blog/c:foreach-vs-ui:repeat-in-facelets

По сути, <c:foreach> обрабатывается только при первоначальном построении представления; оно не становится частью дерева компонентов и может иметь поведение, которого вы не ожидаете при изменении резервной коллекции. Вам может быть лучше использовать <ui:repeat> вместо.

0 голосов
/ 31 мая 2013

У меня была похожая проблема.Я использовал tr: iterator для перебора ArrayList '<' Customer '>' ();«UI: повторить» решил мою проблему.Спасибо.

0 голосов
/ 03 февраля 2012

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

Но я сомневаюсь, что то, чего вы пытаетесь достичь, может быть сделано лучше, посмотрите на эту ссылку @ SO

...