JSF + richfaces проблемы после отправки - PullRequest
1 голос
/ 02 февраля 2011

Мне нужно сделать страницу поиска для какого-то проекта.Поля ввода:

<h:inputText styleClass="field35" value="#{searchBean.country}"></h:inputText>
<h:inputText maxlength="20" styleClass="field35" value="#{searchBean.destination}"></h:inputText>
<rich:calendar  datePattern="dd/MM/yyyy" value="#{searchBean.startDate}"></rich:calendar>
<rich:calendar  datePattern="dd/MM/yyyy" value="#{searchBean.endDate}"></rich:calendar>

и после нажатия:

<h:commandButton id="cb41" action="#{searchBean.processForm}" value="Search" styleClass="button" />

Я ожидаю, что результаты будут напечатаны в разделе rich:dataTable на той же странице.

<rich:dataTable value="#{searchBean.results}" var="journey">

В методе processForm переменная результатов заполняется данными из базы данных, и пользователь перенаправляется на ту же страницу.

Все хорошо после первого поиска, но когда я нажимаю поиск снова, привязки между бином иполя ввода страницы потеряны.Другими словами, в методе processForm для страны, получателя, startData и endDate я получаю только нули, независимо от того, что находится в соответствующих полях на странице.

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

Кто-нибудь знает, в чем может быть проблема?

Спасибо.

Edit: спасибо t-edd. Изменение области видимости для сессионной работы сработало, но это немного убивает производительность, так как весь сессионный компонент остается в сеансе постоянно (и его сложно удалить каждый раз, когда я покидаю нужную страницу).Я понимаю, почему бин уничтожен, но не следует ли создавать новый после следующего запроса с правильными значениями из моей страницы?

Ответы [ 2 ]

2 голосов
/ 03 февраля 2011

кажется, вам нужно добавить

<t:saveState value="#{searchBean}" /> 

на вашу страницу.

этот контроллер сохраняет состояние вашего компонента между запросами (он предоставляет возможность сохранять значение модели внутридерево компонентов представления.).

таким образом его данные будут сохранены без необходимости изменять область действия компонента на сеанс (что я не рекомендую)

вы также можете использовать

<a4j:keepAlive beanName="searchBean"/>
1 голос
/ 03 февраля 2011

Я считаю, что проблема заключается в объеме bean-запроса.Загружаете ли вы данные после каждого запроса?Если нет, то довольно ясно, что значения равны нулю.Попробуйте сессионный объем, иначе вам придется получать данные от вашего сервиса или другого поставщика.

Редактировать:

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

...