valueChangeListener of rich:comboBox вызывается при отправке, которая является непреднамеренной

Я сталкиваюсь с проблемой, когда при изменении значения rich: comboBox мне нужно вызвать backing bean. Поэтому я использую valueChangeListener с a4j:support event="onchange", как показано ниже:

<rich:comboBox value="#{myBean.name}" defaultLabel="#{messages['dropdown.defaultText']}" label="#{messages['label.name']}" status="defaultStatus" valueChangeListener="#{myBean.checkToChangeName}" disabled="#{myBean.isAdminUser}" >
    <f:selectItems value="#{myBean.nameList}" />
    <a4j:support event="onchange" reRender="errTable,popUpPanel" oncomplete="if(#{myBean.showPopup}) #{rich:component('popUpPanel')}.show();" />
</rich:comboBox>

Метод поддерживающего боба:

public boolean checkToChangeName(ValueChangeEvent event){
    // Code to check change is valid & its impact on other fields
}

Метод checkToChangeName() должен получать вызов только по событию change. Но в моем случае методы вызывают при изменении события, а также при отправке формы, которая мне не нужна, и создают проблемы.

Я использую h:commandButton как ниже, чтобы отправить форму:

<h:commandButton id="btnSave" value="#{messages['action.save']}" action="#{myBean.updateProfile}" reRender="profileForm" />

Может кто-нибудь помочь мне понять, почему он вызывает метод checkToChangeName() при отправке? & Как я могу предотвратить это?

1 ответ

Я получил вопрос. Вся форма получала повторный рендеринг при сохранении, что вызывало вызов valueChangeEventListener. Чтобы избежать этого, я просто изменил ниже re-render attibute для кнопки команды save:

Старый:

<h:commandButton id="btnSave" value="#{messages['action.save']}" action="#{myBean.updateProfile}" reRender="profileForm" />

Новое:

`<h:commandButton id="btnSave" value="#{messages['action.save']}" action="#{myBean.updateProfile}" reRender="errorMessageTable" />`

Теперь проблема решена.

Другие вопросы по тегам