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>