【发布时间】:2012-06-09 18:13:12
【问题描述】:
我已经阅读了@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 变量正在变为 null,即使我在构造函数上实例化它。
public CadastroClienteBean(){
cliente = new Cliente();
init();
}
编辑:在调试了一下之后,我发现过滤器的值被设置在变量上,然后 setCliente() 被调用并将其设置为 null,但我不知道为什么。
【问题讨论】:
-
您是否标记了
client属性transient?你不应该。 -
不,我没有
@ManagedBean @ViewScoped public class CadastroClienteBean implements Serializable { /** * */ private static final long serialVersionUID = 1L; private List<Cliente> clientes; private Cliente cliente; private String valor;
标签: jsf binding view-scope jsf-2.2