rich的valueChangeListener:comboBox在提交时调用,这是非预期的

时间:2014-06-02 08:49:44

标签: richfaces jsf-1.1

我正面临一个问题,在改变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()应该只在change事件上调用。但在我的情况下,这些方法被称为变更事件&amp;我也要求提交我不需要的表格。制造麻烦。

我使用h:commandButton作为提交表单:

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

任何人都可以帮我理解为什么在提交时调用checkToChangeName()方法? &安培;我该如何预防?

1 个答案:

答案 0 :(得分:0)

我遇到了这个问题。整个表单在保存时重新渲染,导致调用valueChangeEventListener。为了避免这种情况,我刚刚在下面重新设置了attibute for 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" />`

现在问题已解决。