Jsf 搜索后,p:dataTable赢了';除非两次调用搜索或键入并清除过滤器中的某些内容,否则不会更新

Jsf 搜索后,p:dataTable赢了';除非两次调用搜索或键入并清除过滤器中的某些内容,否则不会更新,jsf,primefaces,datatable,filtering,ajax-update,Jsf,Primefaces,Datatable,Filtering,Ajax Update,我有一个简单的模型,在获取数据表中的一些结果后尝试更新数据表,我使用EJB在数据库中获取这个结果 问题是,在搜索之后,我的dataTable不会更新,除非在搜索按钮上单击两次,或者在fieldText filter中键入一些内容并清除它 我尝试将一些函数设置为“onclick和update”,但所有的解决方案都不起作用 一个重要的情况是:如果删除了我的dataTble的fieldText过滤器,那么dataTable将完全更新,而没有错误:) 有人能说另一种方法或方向来解决我的问题吗 xhtml

我有一个简单的模型,在获取数据表中的一些结果后尝试更新数据表,我使用EJB在数据库中获取这个结果

问题是,在搜索之后,我的dataTable不会更新,除非在搜索按钮上单击两次,或者在fieldText filter中键入一些内容并清除它

我尝试将一些函数设置为“onclick和update”,但所有的解决方案都不起作用

一个重要的情况是:如果删除了我的dataTble的fieldText过滤器,那么dataTable将完全更新,而没有错误:)

有人能说另一种方法或方向来解决我的问题吗

xhtml代码:

<h:form id="frmPesquisa">
    <p:panelGrid columns="3">
        <h:outputLabel value="Pesquisar" for="pesquisa" />
        <h:inputText id="pesquisa"
            value="#{cadastroClienteBean.valorPesquisa}" />
        <p:commandButton value="Pesquisar"
            action="#{cadastroClienteBean.pesquisar}" update="tableResult"
            onclick="PF('itemListases').clearFilters(); PF('itemListases').filter();"/>
    </p:panelGrid>
    <br />
    <br />
    <br />
    <p:dataTable rendered="#{cadastroClienteBean.listaVazia()}" paginator="true" rows="5" widgetVar="itemListases"
        emptyMessage="Não foram encontrados Itens"
        filteredValue="#{cadastroClienteBean.filtrados}" id="tableResult"
        value="#{cadastroClienteBean.clientes}" var="cliente" border="1"
        cellpadding="5">
        <p:column headerText="Código" filterBy="#{cliente.codigo}">
            <h:outputText value="#{cliente.codigo}" />
        </p:column>
        <p:column headerText="Nome">
            <h:outputText value="#{cliente.nome}" />
        </p:column>
        <p:column headerText="Idade">
            <h:outputText value="#{cliente.idade}" />
        </p:column>
        <p:column headerText="Sexo">
            <h:outputText value="#{cliente.sexo}" />
        </p:column>
        <p:column headerText="Profissão">
            <h:outputText value="#{cliente.profissao}" />
        </p:column>
    </p:dataTable>
</h:form>




Bean代码:

@Named
@SessionScoped
public class CadastroClienteBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private Cliente cliente;
    private List<Cliente> clientes;
    private List<Cliente> filtrados;
    private String valorPesquisa;
    private String pesquisaAnterior;

    @EJB
    CadastroClienteEJB cadastroClienteEJB;

    public CadastroClienteBean() {
        System.out.println("===> Chamou o CONSTRUTOR");
        cliente = new Cliente();
        clientes = new ArrayList<Cliente>();
        filtrados = new ArrayList<Cliente>();
    }

    public void pesquisar() {
        if (!valorPesquisa.equals(pesquisaAnterior)) {
            filtrados = new ArrayList<Cliente>();
            if (this.valorPesquisa == null || this.valorPesquisa.equals("")) {
                pesquisaAnterior = new String(valorPesquisa);
                this.clientes = cadastroClienteEJB.buscarTodos();
            } else {
                pesquisaAnterior = new String(valorPesquisa);
                this.clientes = this.cadastroClienteEJB
                        .pesquisar(this.valorPesquisa);
            }
        }
    }
@Named
@会议范围
公共类CadastroClienteBean实现了可序列化{
私有静态最终长serialVersionUID=1L;
私人客户;
私人名单客户;
私有列表过滤器;
私有字符串valorPesquisa;
私有字符串PesquisaInterior;
@EJB
cadastroclientejb-cadastroclientejb;
公共CADASTROClienterbean(){
System.out.println(“==>Chamou o CONSTRUTOR”);
客户=新客户();
clientes=newarraylist();
filtrados=新的ArrayList();
}
公共空间{
如果(!valorPesquisa.equals(pesquisainterior)){
filtrados=新的ArrayList();
如果(this.valorPesquisa==null | | this.valorPesquisa.equals(“”)){
pesquisainterior=新字符串(valorPesquisa);
this.clientes=cadastroclientejb.buscarTodos();
}否则{
pesquisainterior=新字符串(valorPesquisa);
this.clientes=this.cadastroclientejb
佩斯奎萨先生(这是瓦洛佩斯奎萨先生);
}
}
}

非常感谢。它工作得非常好。我删除了数据表的呈现,并放置了一个id标记。在我的commandButton中,我插入了一个更新标记,将先前创建的数据表的标记id放入其中。

一个
更新
元素,该元素具有
呈现的
条件。当
{cadastroClienteBean.listaVazia()}
的计算结果为false,搜索不会更新您的表,因为在DOM树中不可用。相反,请将您的表包装到
h:panelGroup
ui:fragment
中,并将更新应用到包装器组件。非常感谢。它工作正常。我删除了数据表的
render
,并将id
标记
。在我的
命令按钮
中,我插入了一个
更新
标记,将先前创建的数据表的
标记
id放入其中。可能与