Как 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 варианта:

  1. использование <t:saveState>,

    <t:saveState value="#{BeanA}" />
    
  2. Или используйте <a4j:keepAlive>,

    <a4j:keepAlive beanName="BeanA" />
    
Другие вопросы по тегам