JSF 1.2: как сохранить управляемый компонент с областью запроса активным при обратных передачах в одном и том же представлении?

Можно ли сохранить bean-компонент с областью действия запроса для обратных передач на одной странице?

Общая проблема заключается в том, что bean-компонент уничтожается в конце запроса и воссоздается при каждой отправке формы, например, логические значения, стоящие за динамически управляемыми disabled, readonly и rendered, сбрасываются до своих значений по умолчанию и заставляют формы больше не работать должным образом.


person Chris    schedule 05.05.2011    source источник


Ответы (2)


Я предполагаю, что область сеанса не является опцией, иначе этот вопрос не имеет большого смысла.

Вы можете сделать это с помощью Tomahawk <t:saveState>. Добавьте следующую строку где-нибудь на страницу:

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

RichFaces <a4j:keepAlive> делает то же самое:

<a4j:keepAlive beanName="#{bean}" />

Или, если есть место, обновите JSF как минимум до версии 2.x и поместите компонент в область видимости view:

@ManagedBean
@ViewScoped
public class Bean implements Serializable {
    // ...
}

Независимо от способа, один и тот же bean-компонент будет присутствовать, когда вы выполняете обратную передачу в одно и то же представление и продолжаете возвращать null или void из методов действий.

Смотрите также:

person BalusC    schedule 05.05.2011
comment
+1, так как я предполагаю, что область сеанса не является опцией, иначе этот вопрос не имеет большого смысла. и следующий ответ :) - person niksvp; 05.05.2011
comment
+1 для <t:saveState value="#{bean}" /> и <a4j:keepAlive beanName="#{bean}" /> и JSF2.0 - person jmj; 05.05.2011
comment
@niksvp @jigar: общее количество голосов равно 1. Кто забыл проголосовать? :) - person BalusC; 05.05.2011
comment
Кстати, система не уведомляет меня @niksvp @jigar об этом - person jmj; 05.05.2011
comment
@jigar @niksvp а на этом? - person BalusC; 05.05.2011
comment
Теперь, вероятно, вы забыли пробел между jigar и : - person jmj; 05.05.2011
comment
Как ни странно, версии RichFaces требуется только имя компонента, как видно из исходников на страница LiveDemo для keepAlive вместо допустимого выражения JSF EL, которое преобразуется в экземпляр управляемого среднего значения, как Руководство пользователя. - person Usagi Miyamoto; 22.01.2017
comment
@UsagiMiyamoto Оба действительно разрешены, но выражение EL более самодокументируемо. - person BalusC; 22.01.2017
comment
@BalusC Когда я попробовал это несколько дней назад, RichFaces 3.3.3.final выдал исключение о том, что выражение должно оцениваться как строка, и работало только тогда, когда я заменил его простым именем компонента. - person Usagi Miyamoto; 22.01.2017

Не совсем, если только вы не храните Bean где-нибудь, например. Карта в области приложения, чтобы получить ее позже.

Почему бы просто не сделать его сессионным? Для этого существует область сеанса, поэтому несколько запросов во время одного и того же сеанса могут попасть в одно и то же состояние.

person planetjones    schedule 05.05.2011