JSF @ManyToOne Não grava no banco

11 respostas
R

Prezados boa tarde

No meu projeto implementei uma tela Municipios, onde o usuario deverá selecionar o
estado usando um Menu com f:selectItems, o problema é que ao incluir ou alterar um
registro os dados não são persistidos no banco, e não tem Log algum ou seja nem
consigo saber o porque.

Ja revisei as entidades Municipio e Estado estão ok, até porque a tela que lista ( Grade )
não tem problema

11 Respostas

Hebert_Coelho

Quando você coloca um break point no método que salva no DB, os objetos estão lá?

R

jakefrog boa tarde!

Cara … num intendi bem, mais deixa te dizer o que tenho
o MB chamado MunicipioC.java que chama
o Serviço MunicipioService.java que chama
o Dao MunicipioDaoImp.java

bom ja tentei rastrear algo por exemplo no serviço

@Transactional
	public void update(Municipio municipio) {

		System.out.println(" Update - Servico "  );
		
		this.municipiodao.update(municipio);

	}

so que la no eclipse não vem log algum "Qdo tento gravar " Ok porque qdo a tela abre o log ta lá
so não vem o log para salvar ou atualizar, como se não estivesse sendo feito a chamada ao metodo

Hebert_Coelho

Então o problema está que o método não está sendo chamado, é isso?

Oq vc tem feito de diferente do método de salvar para o que funciona?

R

Aqui tem o trecho da tela

<p:dialog header="" widgetVar="dialogGerMunicipio" resizable="false" modal="true" showEffect="slide" width="900">
          <h:form prependId="false" enctype="multipart/form-data">
             <h:panelGrid id="infosMunicipio" columns="1" style="margin-bottom:10px;width : 462px; height : 111px;">
  	             
                  <h:outputLabel for="nome"  value="Nome:" />
                  <h:inputText   id="nome"   value="#{municipioC.municipio.dsMunicipio}" style=" width : 450px;"/>	          
                  <h:outputLabel    value="Uf:" />
                  
                  
                  <h:selectOneMenu   value="#{municipioC.municipio.estado}">
                     <f:selectItems  value="#{municipioC.listEstado}"
                       var="it"
                       itemValue="#{it.idEstado}"
                       itemLabel="#{it.dsEstado}" />                                                                                

                  </h:selectOneMenu>    	            
  	              <!-- 
  	              <p:autoComplete dropdown="true" value="#{municipioC.municipio.idEstado}" 
  	                 completeMethod="#{estadoC.itemsAvailableSelectOne}" 
  	                 var="it" 
  	                 itemLabel="#{it.dsEstado}"
  	                 itemValue="#{it.idEstado}"  /> 
  	              -->   
              </h:panelGrid>  
                 
             <p:commandButton value="gravar" update="tabela" oncomplete="dialogGerMunicipio.hide();" actionListener="#{municipioC.gravar}"/>&nbsp;
             <p:commandButton value="excluir" update="tabela" oncomplete="dialogGerMunicipio.hide();" actionListener="#{municipioC.excluir}"/>
                  	            	          
         </h:form> 	  
      </p:dialog>

e tem o codigo deste metodo no MB

public void buscar(ActionEvent evento) {

		Integer codigo = (Integer)evento.getComponent().getAttributes().get("codigo");
		
        municipio   = municipioService.findByID( codigo );
		
	}	
	
	public void gravar(ActionEvent evento) {
		System.out.println(" Gravar MB "  );
		this.municipioService.update(municipio);
	}
	
	public void excluir(ActionEvent evento) {
		this.municipioService.delete(municipio);
		
	}
R

Bem olhando assim o que tem estas diferente … é o FORM

<h:form prependId=“false” enctype=“multipart/form-data”>

Acho que isto foi copiado de uma tela que tenho o upload de uma foto

Hebert_Coelho

arranca isso fora e tenta uai. [=

R

será? bem queria mesmo que fosse assim meus problemas iriam se resumi apenas a relatorios
de qualquer forma so a noite em casa, aqui no Trabalho não tem como.

Bem de qualquer forma se alguem puder dar alguma dica ( caso vejam algo mais… ) cara
agradeço muito, porque meu projeto ( didatico ) ta qse no fim

Mr.style

Cara todo código…
sempre é bom debugar o código.
Verifique se o objeto está todo populado.
Debugue tanto o Bean quanto o Service.

R

Mr.style boa tarde

Cara, vou tentar, primeiro vou pesquisar como debugar, nunca fiz isto no Eclipse, quer dizer na
verdade nunca fiz isto mesmo.
não estranhe sou realmente novato no Java.

R

Olá

Então, ontem eu tentei ver o que tem de errado na tela, bem não consegui Debugar, tentei mais realmente
é como se o metodo … ele não esta sendo chamado.

Não mesmo

e bem olhando o que esta tela tem de diferente das outras é so a tag selectOneMenu

<h:selectOneMenu   value="#{municipioC.municipio.estado}">
       <f:selectItems  value="#{municipioC.listEstado}"
            var="it"
            itemValue="#{it.idEstado}"
            itemLabel="#{it.dsEstado}" />                                                                                

</h:selectOneMenu>

no MB o metodo chamado é este

public List<Estado> getListEstado() {
    	
    if (listEstado == null) {
 	   listEstado = municipioService.listEstados();		
       }
    	
      return listEstado;
 }

A classe de serviço tem o metodo

@Transactional(readOnly=true)
public List<Estado> listEstados() {

    return estadodao.findall();
		
 }

bem não vejo nada errado aki , não entendo porque o metodo não esta sendo chamado, e nem da erro
simplemente o registro não é gravado, nem qdo se inclui nem qdo se altera

Esta é a unica tela em que eu tenho um relacionamento e o usuario precisa selecionar o Estado para o
Municipio no banco ta tudo certo, a PK, a FK nada errado até porque no banco é mais dificil de errar

R

Prezados achei o problema, estava no Conversor como eu alterei o nome do meu MB não conseguia
fazer o serviço retornar o Objeto agora o porque de não conseguir detectar nenhuma mensagem de
erro? bem acho que isto deve ser por conta do primefaces eu fiz a tela onde a parte de edição fica
em um unico arquivo xhtml usando para a edição um

<p:dialog header="" widgetVar=“dialogGerMunicipio” >

MunicipioController controller = (MunicipioController) facesContext.getApplication().getELResolver().
                    getValue(facesContext.getELContext(), null, "municipioC");
            return controller.municipioService.findByID(getKey(value));
Criado 5 de dezembro de 2011
Ultima resposta 6 de jan. de 2012
Respostas 11
Participantes 3