1

我已经阅读了有关 @ViewScoped ( BUG REPORT ) 的绑定错误,并且它已在最新版本的 JSF 中修复,因此我使用 3 个最新版本的 JSF 对此进行了测试,并尝试使用

  <context-param>
<param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
<param-value>false</param-value>

修复以解决它,但没有运气。

我有一个 primefaces 数据表,其中每个列标题中都有过滤器。

        <p:column id="cpfHeader" sortBy="#{cliente.nrCpf}"
        filterMatchMode="contains">
        <f:facet name="header">
            <h:panelGrid columns="1">
                <h:outputText value="CPF" />
                <p:inputText value="#{cadastroClienteBean.cliente.nrCpf}">

                </p:inputText>
                <p:commandButton
                    actionListener="#{cadastroClienteBean.getClientesBusca}"
                    update="#{form}:tabelaCliente:tblCliente" value="Filtrar"></p:commandButton>
            </h:panelGrid>
        </f:facet>
                #{cliente.nrCpf}                
            </p:column>

在我更改 JSF 版本之前,每次单击“过滤器”按钮时,都会创建一个新的 cadastroClienteBean 实例。现在我已经更改了它,似乎 ManagedBean 不是每次都被实例化,但是 cliente 变量正在变为空,即使我在构造函数上实例化它。

    public CadastroClienteBean(){
    cliente = new Cliente();
    init();
}

编辑:在调试了一下之后,我发现过滤器的值被设置在变量上,然后 setCliente() 被调用并将其设置为 null,但我不知道为什么。

4

1 回答 1

1

弄清楚发生了什么,selection="#{cadastroClienteBean.cliente}"因为没有选择行,所以 dataTable 上的属性将客户端设置为 null。

于 2012-06-05T18:39:50.743 回答