2013-02-15 1 views
0

Я нахожусь в середине перехода от Richfaces 3.3.3 к Richfaces 4.3.0, в котором содержится призыв к обновлению JSF с 1.2 до 2.1. Мы также используем Spring Webflow 2.3.2 (повышен с 2.1.1) для определения беседы. Все бобы управляются весной (без управляемых бобов JSF). Несколько компонентов Richfaces необходимо было настроить для правильной работы приложения снова. Проблема у меня сейчас касается богатых: компонент PickList, который выглядит следующим образом (я взял витрину примера и редактировал его изобразить проблему):Невозможно заполнить правую часть RichFaces 4 pickList под управлением Spring Webflow, управляемого Beans

<rich:pickList id="ownPicklist" value="#{listSelectBean.selectedCapitals}" 
    sourceCaption="Available cities" targetCaption="Selected cities" 
    listWidth="165px" listHeight="100px"> 
    <a4j:ajax event="change" execute="@this" render="#{mainBean.dynamicRerenderList}" /> 
    <f:selectItems value="#{listSelectBean.capitals}" var="capital" 
    itemValue="#{capital}" itemLabel="#{capital.name}" /> 
    <f:converter converterId="CapitalsConverter" /> 
</rich:pickList> 

Теперь в отличии от примера витрины, наша ListSelectBean является Весна фасоли и определяется следующим образом:

<bean id="listSelectBean" class="com.xyz.example.bean.ListSelectBean" scope="request" /> 

обычай конвертер регистрируется в гранях-config.xml:

<converter> 
    <converter-id>CapitalsConverter</converter-id> 
    <converter-class>com.xyz.converter.CapitalsConverter</converter-class> 
</converter> 

A s вы можете видеть, что у нас есть обработчик событий ajax, прикрепленный к pickList, который динамически вычисляет список компонентов, подлежащих повторной передаче, в зависимости от выбранного значения (ов) из списка. Этот список также содержит сам pickList, который, как правило, должен быть переиздан с гораздо меньшим количеством элементов для выбора. Ответ ajax, который я получаю, содержит полный список источников, но список целей пуст.

Теперь к проблеме:

Когда я выбираю элемент с левой стороны он переходит на правую сторону и сразу же снова. Я отлаживал проблему и узнал, что все геттеры и сеттеры listSelectBean вызывается правильно, когда выполняются разные фазы JSF. Тот же пример с управляемым JSF, обработчиком запросов, обработанным в режиме реального времени, отлично работает (который находится в витрине Richfaces), а также с ajax rerender на самом компоненте. Я подозреваю, что проблема с обработкой bean-компонентов весной (Webflow). Но я не могу это точно определить. Любая помощь будет высоко оценена.

ответ

0

После долгих часов отладки я наконец нашел решение проблемы. Поскольку RichFaces использует HashSet во время процесса рендеринга, важно, чтобы методы hashCode() и equals() переопределялись для сложных объектов (что является хорошей идеей в целом), используемой в PickList. В противном случае выбранные объекты не будут отмечены как выделенные.