Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Não Reinderiza o componente p:dataTable

Pela classe controle, tudo bem. Mas não reinderiza o componente com este id=bairroDadosPesquisa

No Controle pelo debug, vejo que ele vai para S, após achar dados na consulta.

Controle

if (resultList != null) {
            setTemResultadoPequisa("S");
            mensagem = "Foram encontrados " + resultList.size() + " Bairros com estes parâmetros !";
            face.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, mensagem, null));
            logger.info(mensagem);
        } else {
            setTemResultadoPequisa("N");
            mensagem = "Com estes parâmetros não foi encontrado nenhum bairro !";
            face.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, mensagem, null));
            logger.info(mensagem);
        }
insira seu código aqui

xhtml 1

<h:form id="bairro">
<p:commandButton value="Pesquisar" styleClass="button"
                        action="#{bairrocontroller.pesquisarBairros}"
                        update="@all" process="@all">
                    </p:commandButton>

                </h:panelGrid>

xhtml 2

<h:form id="bairroDadosPesquisa"
                rendered="#{bairrocontroller.temResultadoPequisa}='S'">

                <p:dataTable value="#{bairrocontroller.pesquisarBairros}"
                    if="tabelaBairroDadosPesquisa" var="bairro" rows="10"
                    paginator="true"
                    paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                    rowsPerPageTemplate="50,100,500">
                    <f:ajax event="contextMenu" execute="@all" render="message"
                        onstart="PF('statusDialog').show()"
                        onsuccess="PF('statusDialog').hide()" />
                    <p:column headerText="País" sortBy="#{bairro.pais.descricao}">
                        <h:outputText value="#{bairro.pais.descricao}" />
                    </p:column>
                    <p:column headerText="Estado" sortBy="#{bairro.estado.descricao}">
                        <h:outputText value="#{bairro.estado.descricao}" />
                    </p:column>
                    <p:column headerText="Município"
                        sortBy="#{bairro.municipio.descricao}">
                        <h:outputText value="#{bairro.municipio.descricao}" />
                    </p:column>
                    <p:column headerText="Bairro" sortBy="#{bairro.descricao}">
                        <h:outputText value="#{bairro.descricao}" />
                    </p:column>
                    <p:column style="width:32px;text-align: center">
                        <p:commandButton icon="    ui-icon-pencil" type="button"
                            action="#{bairrocontroller.carregarUmBairro(bairro)}"
                            title="Alterar" update="@form" process="@form">
                        </p:commandButton>
                    </p:column>
                    <p:column style="width:32px;text-align: center">
                        <p:commandButton oncomplete="PF('carDialog').show()"
                            icon="ui-icon-trash" title="Remover"
                            action="#{bairrocontroller.removeBairro(bairro)}" update="@form"
                            process="@form">
                        </p:commandButton>
                    </p:column>
                </p:dataTable>
5 respostas

o metodo getPesquisarBairros retorna a lista populada pelo outro form? pq vc invoca um metodo de pesquisa em funcao do clique do botao do form, so que ai referencia esse mesmo metodo na tabela abaixo.

Não tudo está no mesmo metodo, pesquisarBairros. Coloquei o mesmo aqui.

    public void pesquisarBairros() {
        FacesContext face = FacesContext.getCurrentInstance();
        String paisBusca = face.getExternalContext().getRequestParameterMap().get("bairro:pais");
        String estadoBusca = face.getExternalContext().getRequestParameterMap().get("bairro:estado_input");
        String municipioBusca = face.getExternalContext().getRequestParameterMap().get("bairro:municipio_input");
        String bairroBusca = face.getExternalContext().getRequestParameterMap().get("bairro:bairro_input");
        List parametroPesquisas = new ArrayList();
        parametroPesquisas.add(paisBusca.length());
        parametroPesquisas.add(estadoBusca.length());
        parametroPesquisas.add(municipioBusca.length());
        parametroPesquisas.add(bairroBusca.length());
        Integer contadorPesquisa = 0;
        for (int i = 0; i < parametroPesquisas.size(); i++) {
            if (!parametroPesquisas.get(i).equals(0)) {
                contadorPesquisa++;
            }
        }
        if (contadorPesquisa < 2) {
            mensagem = "Deve ter dois parametros no mínimo para buscar !!";
            face.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro !!!", mensagem));
            logger.info(mensagem);
            return;
        }
        mensagem = "Busca todos bairros.";
        logger.info(mensagem);
        List<BairroEntity> resultList = buscaBairros(paisBusca, estadoBusca, municipioBusca, bairroBusca);
        if (resultList != null) {
            setTemResultadoPequisa("S");
            mensagem = "Foram encontrados " + resultList.size() + " Bairros com estes parâmetros !";
            face.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Informação", mensagem));
            logger.info(mensagem);
        } else {
            setTemResultadoPequisa("N");
            mensagem = "Com estes parâmetros não foi encontrado nenhum bairro !";
            face.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro fatal !!!", mensagem));
            logger.info(mensagem);
        }
    }

entao, a sua lista precisa referenciar um getter que retorne a lista preenchida em funcao da pesquisa.

Tem que ter um metodo com este nome getMostrarBairros() e lá no xhtml, coloco mostrarBairros é isto ?

Ai automaticamente ele entende um com outro ?

solução!

Obrigado alberto.

O retorno da consulta no set abaixo: setMostrarBairros(resultList);

Criei estes parametros e funcionou private List mostrarBairros;

public List<BairroEntity> getMostrarBairros() {
    return mostrarBairros;
}

public void setMostrarBairros(List<BairroEntity> mostrarBairros) {
    this.mostrarBairros = mostrarBairros;
}