Множественные вызовы ajax очищают ранее отправленные значения в управляемом компоненте

У меня проблемы с несколькими вызовами ajax на одной странице. Первый вызов ajax для события «размытие» заполняет раскрывающийся список. Затем, когда кнопка нажата, страница должна отображать «otherElement» на основе значений в форме. Проблема заключается в том, что когда «term» находится в выполнении последнего вызова ajax, это также приводит к тому, что термин, CompanyCode и fileNumber имеют значение null в FormBean. Когда я статически заполняю термины, это работает.

<h:form id="createRequest">

            <h:selectOneMenu id="CompanyCode" required="true"
                value="#{FormBean.CompanyCode}"> 
                <f:selectItems value="#{utility.Companies}" />
            </h:selectOneMenu>
            <br/>

            <h:inputText id="fileNumber" styleClass="field"
                value="#{FormBean.fileNumber}"
                required="true">
                <f:ajax event="blur" execute="CompanyCode fileNumber"
                    render="term" />
            </h:inputText>
            <br />

            <h:selectOneMenu id="term" required="true"
                value="#{FormBean.term}">
                <f:selectItems value="#{FormBean.terms}" />
            </h:selectOneMenu>

            <br />

            <h:commandButton class="button" style="button"
                value="#{resources['btn.common.submitRequest']}">
                <f:ajax event="click"
                    execute="CompanyCode fileNumber term"
                    render="otherElement" />
            </h:commandButton>

        </h:form>

Любые идеи? Спасибо


person Ryan    schedule 04.05.2011    source источник
comment
В каком объеме находится ваш поддерживающий компонент? Не могли бы вы опубликовать это?   -  person Dave Maple    schedule 04.05.2011
comment
к. это то, о чем я думал. увидеть ниже.   -  person Dave Maple    schedule 04.05.2011


Ответы (1)


Вероятно, ваш bean-компонент находится в области запроса, что приводит к тому, что он снова и снова создается заново при каждом HTTP-запросе (ajax или нет). Все изменения/свойства, установленные запросами ajax, теряются при последующих запросах. Вам нужно поместить bean-компонент в область просмотра.

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

Таким образом, компонент будет жить до тех пор, пока вы возвращаете void или null из методов действия.

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

person BalusC    schedule 04.05.2011
comment
Великолепно! Вот оно. Я понял, что решение было довольно простым, я просто не мог его найти. Большое спасибо. - person Ryan; 04.05.2011