Как JSF загружает значения свойств управляемого компонента?
Я новичок в JSF. У меня есть вопрос об управляемом бобе.
Шаг 0:
Существует управляемый компонент BeanA, область действия - запрос. И BeanA instance1.propertyA = "0";
Шаг 1:
используя ajax для изменения страны, затем в методе BeanA.countryChanged измените управляемый компонент BeanA.propertyA = "A".
<t:selectOneMenu id="Country" required="true" valueChangeListener="#{BeanA.countryChanged}">
<a4j:support event="onchange" limitToList="true" ajaxSingle="true" />
<f:selectItems value="#{BeanA.countries}" />
</t:selectOneMenu>
Шаг 2:
отправить форму для подтверждения ввода текста
<h:inputText id="street" required="#{BeanA.propertyA == "A"}"
Я ожидаю, что на шаге 2 значение propertyA экземпляра BeanA instance2 должно быть "A" на этапе проверки JSF, но на самом деле это "0". Я не знаю, как JSF загружает значения свойств экземпляра BeanA для создания нового экземпляра BeanA. И что мне делать, значение изменится на "А"? Спасибо,
1 ответ
Симптомы указывают на то, что ваш боб имеет объем запроса. Это означает, что он восстанавливается при каждом HTTP-запросе. Вы, вероятно, не понимали, что каждый отдельный ajax-запрос также считается отдельным HTTP-запросом. В результате вы не будете повторно использовать один и тот же экземпляр компонента в постбеках ajax в одном представлении. Каждый раз, когда создается новый экземпляр со всеми его свойствами по умолчанию.
JSF 2.0, разработанный с учетом требований ajax, решил эту проблему с помощью нового view
сфера в стандартном API.
В JSF 1.x вам необходимо использовать сторонние библиотеки компонентов. В вашем конкретном случае, учитывая, что вы используете и Tomahawk, и Ajax4jsf, у вас есть 2 варианта:
использование
<t:saveState>
,<t:saveState value="#{BeanA}" />
Или используйте
<a4j:keepAlive>
,<a4j:keepAlive beanName="BeanA" />