@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に設定されていることがわかりましたが、理由はわかりません。