1

@ViewScoped(BUG REPORT)のバインディングバグについて読み、JSFの最新バージョンの1つで修正されたので、これをJSFの最新バージョン3つでテストし、

  <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のバージョンを変更する前は、[Filtrar]ボタンをクリックするたびに、cadastroClienteBeanの新しいインスタンスが作成されていました。変更したので、ManagedBeanが毎回インスタンス化されているわけではないようですが、コンストラクターでインスタンス化しても、cliente変数はnullになります。

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

編集:少しデバッグした後、フィルターの値が変数に設定されており、その直後にsetCliente()が呼び出されてnullに設定されていることがわかりましたが、理由はわかりません。

4

1 に答える 1

1

selection="#{cadastroClienteBean.cliente}"行が選択されていないため、dataTableの属性がクライアントを null に設定していたことを突き止めました。

于 2012-06-05T18:39:50.743 に答える