我正在为我的应用程序使用ICEFaces 1.8。我在这样的网格中有一些SelectInputText:

<ice:panelGrid columns="4">
            <ice:selectInputText id="txtId"
                         valueChangeListener="#{employeeBean.searchIdListener}" partialSubmit="true"></ice:selectInputText>
            <ice:selectInputText id="txtFirstName"
                         valueChangeListener="#{employeeBean.searchFirstNameListener}" partialSubmit="true"></ice:selectInputText>
            <ice:selectInputText id="txtLastName"
                         valueChangeListener="#{employeeBean.searchLastNameListener}" partialSubmit="true"></ice:selectInputText>
            <ice:selectInputText id="txtPhoneNumber"
                         valueChangeListener="#{employeeBean.searchPhnNbrListener}" partialSubmit="true"></ice:selectInputText>
        </ice:panelGrid>


当我更改上述SelectInputText中的任何一个的值时,我可以看到上述所有四个ValueChangeListener方法都将被执行-为什么?

不仅是要执行的方法的SelectInputText会有一些值更改吗?

请让我知道这一点。

最佳答案

我认为这是由于对partialSubmit属性的意图有误解以及对valueChangeListener的误解。

通过单击“提交”按钮提交表单时,可以说,绑定到托管属性值或在valueChangeListener中分配了托管bean方法的表单中的所有组件的请求值都由服务器提交,处理和验证。假设验证阶段成功,则将那些提交的值传递到UPDATE_MODEL阶段,在此阶段将调用每个valueChangeListener方法。

基本上,此方法不被视为单击或更改事件之类的应用程序事件。

但是,使用Ajax提交,我们可以控制将提交JSF表单中的哪些组件,以及在客户端收到响应后,将重新呈现哪些控件以显示其新值。但是,属性partialSubmit可以简单地与Ajax请求结合使用,以最小化ViewState和请求的大小(出于性能原因)。从功能上说,仅此partialSubmit属性没有任何实际作用。

09-16 11:54