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" />`
Теперь проблема решена.