Aplicação em JSF exibindo registros com atraso [Resolvido]

3 respostas
F

Boa tarde gente,

tenho uma aplicação q utilizo JSF 2 com hibernate, em minha aplicação tenha uma tabela chamada ‘cidade’ e outra chamada ‘pessoa’, para cadastrar uma pessoa é necessário que a pessoa tenha uma cidade, até ai tudo bem

Cada uma das tabelas tem uma view individual, ou seja, a tabela ‘cidade’ tem uma unica view que faz o CRUD em uma unica pagina, assim como a tabela de ‘pessoas’ tbm.

Porém na hora de gravar o resultado na tabela ‘cidade’, se eu pesquisar na mesma pagina eu vejo o resultado ja gravado corretamente, mas se depois de gravar o registro for diretamente para a pagina de ‘pessoas’, o lista de cidades que é exibida para ser cadastrada com a pessoa é exibida sem as recentes mudanças,

Existem duas maneiras que eu contorno isso, mas são gambiarras, a primeira é simples, se eu atualizar a pagina apertando F5, a pagina é carregada novamente e ai ela consegue trazer meu registiro modificado, outra maneira é gravar o registro na tabela de ‘cidade’ e depois navegar para uma outra pagina qualquer e depois ir para a pagina de pessoas, dessa maneira o registro é exibido

alguém sabe o pq isso pode estar acontecendo

abaixo estao meus managedBeans e views

ListaCidade.java

@ManagedBean
public class ListaCidade {

    private String cid_nom = "";
    private List suaLista;

    @PostConstruct
    public void filtrar() {
        Session sessao = CriadorDeSessaoNovo.getSession();
        //Criteria listagem_query = sessao.createCriteria("br.salesianos.modelo.Cidade").
        Criteria listagem_query = sessao.createCriteria(Cidade.class).
                addOrder(Order.asc("cid_nom"));
        setSuaLista(listagem_query.list());
        sessao.close();
    }

GravaCidade.java

@ManagedBean
public class GravaCidade implements CRUD{

    private Integer est_id;
    private Integer cid_id;
    private String cid_nome;
    private Session sessao = CriadorDeSessaoNovo.getSession();
    private Transaction tx = sessao.beginTransaction();


    public GravaCidade() {
        this.est_id = est_id;
        this.cid_id = cid_id;
        this.cid_nome = cid_nome;
    }

    
    public void limpante() {
        this.est_id = null;
        this.cid_id = null;
        this.cid_nome = null;
    }

    public void gravar() {
        try {

            Estado obj_estado = new Estado();
            obj_estado.setEst_id(getEst_id());

            Cidade obj_cidade = new Cidade();

            if (getCid_id() != 0) {
                obj_cidade.setCid_id(cid_id);
            }

            obj_cidade.setCid_nom(AlteraLetras.retornaFrase(getCid_nome()));
            obj_cidade.setEstado(obj_estado);
            

            sessao.saveOrUpdate(obj_cidade);
            tx.commit();
            sessao.close();
            limpante();
            FacesContext.getCurrentInstance().addMessage("FormCidade:gravar", new FacesMessage("Informações gravadas com sucesso!"));
        } catch (Exception erro) {
            System.out.println("Problema : " + erro);
            tx.rollback();
            sessao.close();
            FacesContext.getCurrentInstance().addMessage("FormCidade:gravar", new FacesMessage("Falha ao gravar informações!"));
        }
    }

    public void excluir() {


        try {
            Cidade obj_cidade = new Cidade();
            obj_cidade.setCid_id(getCid_id());

            sessao.delete(obj_cidade);

            tx.commit();
            sessao.close();
            limpante();
            FacesContext.getCurrentInstance().addMessage("FormCidade:excluir", new FacesMessage("Informações excluídas com sucesso!"));

        } catch (Exception erro) {

            System.out.println("Problema : " + erro);
            tx.rollback();
            sessao.close();
            FacesContext.getCurrentInstance().addMessage("FormCidade:excluir", new FacesMessage("Falha ao excluir informações!"));
        }
    }

sec_Cidade.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                template="/template/principalSec.xhtml"
                xmlns:h="http://java.sun.com/jsf/html"                
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:rich="http://richfaces.org/rich"
                xmlns:a4j="http://richfaces.org/a4j"
                xmlns:c="http://java.sun.com/jsp/jstl/core"
                >
    <h:body onload="#{listaCidade.filtrar}">

    </h:body>

    <ui:define name="css_javascript">
        <script language="JavaScript">
        function function1(elem) {
                var d = elem.childNodes[0].innerHTML;
                var e = elem.childNodes[1].innerHTML;
                var f = elem.childNodes[2].innerHTML;
                //alert("-"+d+"-"+e+"-"+f)
                document.getElementById("FormCidade:itId").value=d;
                document.getElementById("FormCidade:itIdOculto").value=d;
                document.getElementById("FormCidade:somEstado").value=e;
                document.getElementById("FormCidade:itNome").value=f;
        }
        function limpador() {
                document.getElementById("FormCidade:itId").value="";
                document.getElementById("FormCidade:itIdOculto").value="";
                document.getElementById("FormCidade:somEstado").value="";
                document.getElementById("FormCidade:itNome").value="";
        }
        </script>        
    </ui:define>

    <ui:define name="migalha">
        Home > Tabelas > Cidade        
    </ui:define>

    <ui:define name="body">
        <div align="center">

            <table>
                <tr>
                    <td><rich:message for="gravar" /></td>
                <td><rich:message for="excluir" /></td>
                </tr>
            </table>
            <br/>
            <rich:panel header="Cidade" >
                <h:form id="FormCidade">

                    <table class="alinhaDireita">
                        <tr>
                            <td>Id:</td>
                            <td><h:inputText id="itId" disabled="true" value="#{gravaCidade.cid_id}" /></td>
                        </tr>
                        <tr>
                            <td>Estado:*</td>
                            <td>
                        <h:selectOneMenu required="true" id="somEstado" value="#{gravaCidade.est_id}" >
                            <f:selectItems  value="#{listaEstado.suaLista}" var="u" itemLabel="#{u.est_sigla}" itemValue="#{u.est_id}" />
                        </h:selectOneMenu>
                        </td>                        
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="somEstado" /></td>
                        </tr>
                        <tr>
                            <td>Nome da cidade:*</td>
                            <td><h:inputText id="itNome" required="true" value="#{gravaCidade.cid_nome}" /></td>                            
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="itNome" /></td>
                        </tr>
                    </table>
                    <br/>

                    <h:inputHidden id="itIdOculto"  value="#{gravaCidade.cid_id}"/>

                    <h:commandButton immediate="true" onclick="limpador()"  value="Limpar" />

                    <h:commandButton id="gravar"   action="#{gravaCidade.gravar}" value="Gravar"  />

                    <h:commandButton id="excluir" value="Excluir" action="#{gravaCidade.excluir}" />


                </h:form>
            </rich:panel>

            <br/>

            <rich:panel header="Pesquisa" >
                <h:form >
                    <h:inputText value="#{pesquisaTudo.digitar}" />
                    <a4j:commandButton value="Pesquisar" render="out" action="#{pesquisaTudo.pesquisar}">
                        <f:param name="classe" value="br.salesianos.modelo.Cidade" />
                        <f:param name="campo" value="cid_nom" />
                    </a4j:commandButton>
                    <br/><br/>

                </h:form>
                <a4j:outputPanel id="out">
                    <div class="scroller">
                        <table class="fundoAzul">
                            <tr class="corBranca">
                                <td>ID</td>
                                <td>Cidade</td>
                                <td>Estado</td>
                            </tr>
                            <a4j:repeat value="#{pesquisaTudo.suaListaPesquisa}" var="x">
                                <tr class="fundoBranco" onclick="function1(this)" ><td>#{x.cid_id}</td><td style="display: none">#{x.estado.est_id}</td><td>#{x.cid_nom}</td><td >#{x.estado.est_sigla}</td></tr>
                            </a4j:repeat>
                        </table>
                    </div>
                </a4j:outputPanel>
            </rich:panel>
            <br/>
        </div>
    </ui:define>

</ui:composition>

sec_Pessoas.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                template="/template/principalSec.xhtml"
                xmlns:h="http://java.sun.com/jsf/html"                
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:rich="http://richfaces.org/rich"
                xmlns:a4j="http://richfaces.org/a4j"
                xmlns:c="http://java.sun.com/jsp/jstl/core"
                >
    

    <ui:define name="css_javascript">        
<!--            Funções javascript que eu uso(acho q nao precisa mostrar o codigo) ->
        


    </ui:define>

    <ui:define name="migalha">
        Home > Curriculum > Cadastro > Pessoas
    </ui:define>

    <ui:define name="body">
        <div align="center">

            <table>
                <tr>
                    <td><rich:message for="gravar" /></td>
                    <td><rich:message for="excluir" /></td>
                </tr>
            </table>
            <br/>
            <rich:panel header="Pessoas" >
                <h:form id="FormPessoas" >                    

                    <h:inputHidden id="pesId" value="#{gravaPessoas.pes_id}"/>
                    <table  class="alinhaDireita">
                        <tr>
                            <td>ID:</td>
                            <td><h:inputText id="pesIdLeitura" disabled="true" value="#{gravaPessoas.pes_id}"/></td>
                        </tr>
                        <tr>
                            <td>Primeiro Nome:*</td>
                            <td><h:inputText id="pesPrenome" required="true" requiredMessage="O campo deve ser preenchido" value="#{gravaPessoas.pes_prenome}"/></td>                            
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="pesPrenome" /></td>
                        </tr>
                        <tr>
                            <td>Nome do Meio:*</td>
                            <td><h:inputText id="pesNomeMeio" required="true"  value="#{gravaPessoas.pes_nome_meio}"/></td>                            
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="pesNomeMeio" /></td>
                        </tr>
                        <tr>
                            <td>Sobrenome:*</td>
                            <td><h:inputText id="pesSobrenome" required="true"  value="#{gravaPessoas.pes_sobrenome}"/></td>                            
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="pesSobrenome" /></td>
                        </tr>
                        <tr>
                            <td>Nome Italiano:</td>
                            <td><h:inputText id="pesNomeItaliano" value="#{gravaPessoas.pes_nome_italiano}"/></td>
                        </tr>
                        <tr>
                            <td>Nome do pais de Origem:*</td>
                            <td><h:inputText id="pesPaisOrigem" required="true"  value="#{gravaPessoas.pes_nome_pais_origem}"/></td>                            
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="pesPaisOrigem" /></td>
                        </tr>
                        <tr>
                            <td>Cidade:*</td>
                            <td><h:selectOneMenu id="cidId" required="true"  value="#{gravaPessoas.cid_id}">
                            <f:selectItems value="#{listaCidade.suaLista}" var="u" itemLabel="#{u.cid_nom}" itemValue="#{u.cid_id}" />
                        </h:selectOneMenu></td>
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="cidId" /></td>
                        </tr>
                        <tr>
                            <td>Data de Nascimento:*</td>
                            <td><h:inputText id="pesDataNascimento" styleClass="data" required="true"  value="#{gravaPessoas.pes_data_nascimento}" >
                            <f:convertDateTime type="date" pattern="dd/MM/yyyy" locale="pt_BR" timeZone="GMT-3"/>
                        </h:inputText></td>
                        
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="pesDataNascimento" /></td>
                        </tr>
                        <tr>
                            <td>Data de Expedição do RG:</td>
                            <td><h:inputText id="pesRgDat" styleClass="data" value="#{gravaPessoas.pes_rg_dat}" >
                            <f:convertDateTime type="date" pattern="dd/MM/yyyy" locale="pt_BR" timeZone="GMT-3"/>
                        </h:inputText></td>
                        
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="pesRgDat" /></td>
                        </tr>
                        <tr>
                            <td>Numero do RG:</td>
                            <td><h:inputText id="pesRgNum" value="#{gravaPessoas.pes_rg_num}"/></td>
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="pesRgNum" /></td>
                        </tr>
                        <tr>
                            <td>Orgão expedidor do RG:</td>
                            <td><h:inputText id="pesRgExpedido" value="#{gravaPessoas.pes_rg_expedidor}"/></td>
                        </tr>
                        <tr>
                            <td>Estado expedidor do RG:</td>
                            <td><h:selectOneMenu id="pesRgEstado" value="#{gravaPessoas.est_id}">
                            <f:selectItems value="#{listaEstado.suaLista}" var="u" itemLabel="#{u.est_nom}" itemValue="#{u.est_id}" />
                        </h:selectOneMenu></td>
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="pesRgEstado" /></td>
                        </tr>
                        <tr>
                            <td>CPF:</td>
                            <td><h:inputText id="pesCpf" styleClass="cpf" value="#{gravaPessoas.pes_cpf}">
                            <f:converter converterId="CpfConverter"/>
                        </h:inputText></td>
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="pesCpf" /></td>
                        </tr>
                        <tr>
                            <td>Telefone1:</td>
                            <td><h:inputText id="pesTelefone1" value="#{gravaPessoas.pes_telefone1}" styleClass="fone">
                            <f:converter converterId="TelefoneConverter"/>
                        </h:inputText></td>
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="pesTelefone1" /></td>
                        </tr>
                        <tr>
                            <td>Telefone2:</td>
                            <td><h:inputText id="pesTelefone2" value="#{gravaPessoas.pes_telefone2}" styleClass="fone">
                            <f:converter converterId="TelefoneConverter"/>
                        </h:inputText></td>
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="pesTelefone2" /></td>
                        </tr>
                        <tr>
                            <td>Telefone3:</td>
                            <td><h:inputText id="pesTelefone3" value="#{gravaPessoas.pes_telefone3}" styleClass="fone">
                            <f:converter converterId="TelefoneConverter"/>
                        </h:inputText></td>
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="pesTelefone3" /></td>
                        </tr>
                        <tr>
                            <td>Email Pessoal:</td>
                            <td><h:inputText id="pesEmailPessoal" value="#{gravaPessoas.pes_email_pessoal}"/><br/></td>
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="pesEmailPessoal" /></td>
                        </tr>
                        <tr>
                            <td>CEP:</td>
                            <td><h:inputText id="pesCep" value="#{gravaPessoas.pes_cep}" styleClass="cep">
                            <f:converter converterId="CepConverter"/>
                        </h:inputText>
                        </td>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="pesCep" /></td>
                        </tr>
                        </tr>
                        <tr>
                            <td>Logradouro:</td>
                            <td><h:inputText id="pesLogradouro" value="#{gravaPessoas.pes_logradouro}"/></td>
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="pesLogradouro" /></td>
                        </tr>
                        
                        <tr>
                            <td>Numero:</td>
                            <td><h:inputText id="pesNumero" value="#{gravaPessoas.pes_numero}"/></td>
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="pesNumero" /></td>
                        </tr>
                        <tr>
                            <td>Complemento:</td>
                            <td><h:inputText id="pesComplemento" value="#{gravaPessoas.pes_complemento}"/></td>
                        </tr>
                        <tr>
                            <td>Bairro:</td>
                            <td><h:inputText id="pesBairro" value="#{gravaPessoas.pes_bairro}"/></td>
                        </tr>
                        <tr>
                            <td colspan="2"><h:message  styleClass="mensagemErro" for="pesBairro" /></td>
                        </tr>
                    </table>


                    <br/>
                    <h:commandButton immediate="true" onclick="limpador()"  value="Limpar"/>

                    <h:commandButton id="gravar"  value="Gravar" action="#{gravaPessoas.gravar}" />

                    <h:commandButton id="excluir" value="Excluir" action="#{gravaPessoas.excluir}" />
                </h:form>
            </rich:panel>

            <br/>

<!--            Richpanel que eu uso(acho q nao precisa mostrar o codigo ->
            <br/>

        </div>            
    </ui:define>

</ui:composition>

3 Respostas

carlos_hen

O que a acontece é que o seu bean ListaCidade ainda está instanciado quando vc volta para a página de pessoas.
Quando vc dá F5, vc na verdade acaba fazendo uma nova request, que acaba criando uma nova instância desse bean e
consequentemente fazendo rodar novamente o seu método “@PostConstruct” chamado filtrar, que faz uma nova consulta e te traz esses registros atualizados.

Sugestão:
Coloca essa consulta de filtro dentro do getSuaLista, que vai disparar uma consulta nova e atualizada a cada vez que vc entrar na página.

flws.

carlos_hen

Como vc tá saindo da página de cidades e indo para página de pessoas?

F

Eu estava indo da pagina de cidades para pessoas usando links ,

eu usei a ideia q vc falou do getSuaLista

public List<Estado> getEstados(){
        Session sessao = CriadorDeSessaoNovo.getSession();
        Criteria listagem_query = sessao.createCriteria("br.salesianos.modelo.Estado").
                addOrder(Order.asc("est_nom"));
        List<Estado> lista = (listagem_query.list());
        sessao.close();
        return lista;
    }

e no f:selecyitens eu chamei esse metodo e agora ta funcinando perfeitamente, muito obrigado pela sua ajuda

Criado 2 de agosto de 2011
Ultima resposta 3 de ago. de 2011
Respostas 3
Participantes 2