У меня есть <h:selectOneListbox>
, заполненный <s:selectItems>
, который просто прикреплен к свойству списка в моем объекте Seam. Вот мой (упрощенный) код JSF:
<a4j:outputPanel ajaxRendered="true" id="valuesListPanel">
<table border="0" cellspacing="5">
<tr><td rowspan="5">
<h:selectOneListbox id="pickValue" value="#{seamObject.selectedValue}">
<s:selectItems value="#{seamObject.propertyValues}" var="properties" label="#{properties}" />
</h:selectOneListbox>
</td>
<td><a4j:commandButton value="Move Up"
action="#{seamObject.moveUp}"/></td></tr>
<tr><td><a4j:commandButton value="Move Down" action="#{seamObject.moveDown}"/></td></tr>
</table>
</a4j:outputPanel>
Методы moveUp и moveDown в объекте Seam находят выбранный элемент в списке поддержки и перемещают его вверх или вниз.
Вот проблема, с которой я сталкиваюсь: когда я нажимаю одну из этих кнопок, AJAX-запрос проходит, и объект поддержки действительно меняется. Тем не менее, список не обновляется. Однако во второй раз, когда я нажимаю одну из этих кнопок, предыдущее изменение отражается в списке.
Итак, если я «переместюсь» вниз на один пункт, никаких изменений не будет видно. Однако, если я «перемещаюсь» вверх по другому предмету, с этим ничего не случится, но предмет, который я раньше хотел сдвинуть, двигается вниз.
Взлом этого путем принудительного выполнения другого AJAX-запроса «работает», за исключением того, что второй запрос удаляет все сообщения FacesMessages, которые должны отображаться.
Как мне заставить это работать? Есть ли лучший способ подойти к проблеме?