0

我面临一个问题,在更改 rich:comboBox 值时,我需要调用支持 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>

支持bean方法:

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

方法 checkToChangeName() 应该只在更改事件时调用。但在我的情况下,这些方法在更改事件时被调用,并且在提交我不需要的表单时也被调用并造成麻烦。

我使用 h:commandButton 如下提交表单:

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

谁能帮我理解为什么它在提交时调用 checkToChangeName() 方法?& 我该如何预防?

4

1 回答 1

0

我得到了这个问题。整个表单在保存时重新渲染,导致调用 valueChangeEventListener。为避免这种情况,我只是在下面更改了保存命令按钮的重新渲染属性:

老的:

<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" />`

现在问题解决了。

于 2014-07-08T11:06:11.680 回答