1

我正在为我的应用程序使用 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 有一些值变化的方法被执行吗?

请让我知道这件事。

4

2 回答 2

2

这可能是因为<ice:selectInputText>初始值为NULL并且第一次部分或完整提交将导致从页面提交EMPTY 字符串。

使用空字符串初始化您的 selectInputText 以避免这种情况,或者您可以在 JSF 2.x 中添加以下内容,

<context-param>
    <param-name>
         javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL
    </param-name>
    <param-value>true</param-value>
</context-param>

还要添加到 Icefaces,它的部分提交有点令人困惑。它更像是带有部分 Ajax/DOM 渲染的完整 Ajax 提交。在某些情况下,icefaces 1.8 会在页面上执行多个组件,但它会避免在数据表列、面板系列等中执行此操作。

于 2013-04-24T02:10:30.523 回答
1

我认为这源于对partialSubmit属性的用途的误解以及对valueChangeListener.

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

基本上,此方法不像Click或 Change 事件那样被视为应用程序事件。

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

于 2013-04-23T12:19:26.970 回答