Nao esta atualizando o objeto jsf 2.0[RESOLVIDO]

14 respostas
dijava

pessoal um problema q parecia ate facil mas nao estou conseguindo resolver, tem um form q é so para atualizacao, ele chega no meu metodo e tudo mas na hora de dar um "entityManager.merge" nao esta atualizando no banco, queria saber o pq ? coloquei o show_sql = true e nem mostra no console o sql "update briefing set....." pq nao atualiza ?

<h:head>
	<h:outputStylesheet library="css" name="style.css"/>
	<h:outputScript name="jsf.js" library="javax.faces" target="body"/>
	
	<f:metadata>
	    	<f:viewParam name="id" value="#{meuBean.id}"/>
   	</f:metadata>
</h:head>
<h:body>
<f:view contentType="text/html">
	<h:form>
		<h:messages/>		
		<h:outputLabel value="Nome: "/><h:inputText value="#{meuBean.briefing.nome}"/><br/>
		<h:outputLabel value="Descricao: "/><h:inputTextarea value="#{meuBean.briefing.descricao}"/><br/>
		<h:commandButton value="Alterar" action="#{meuBean.atualizar}"/>
	</h:form>
</f:view>
</h:body>
</html>
@ViewScoped
@ManagedBean
public class MeuBean implements Serializable{

        private EntityManager em;
	private String id;
	private Briefing briefing;

	/* get e set */

         public void atualizar(){
		BriefingDAO dao = new BriefingDAO(em);
		briefing = dao.merger(briefing);		
	}
}

14 Respostas

dev.rafael

Vc pode postar o código do seu BriefingDAO ai?

dijava

ele esta funcionando eu criei um main para testa isso, é ate compreensivel sua pergunta, tanto que estou achando bizarro esse problema, eu tenho um filtro q abre transacao antes do “doFilter” commita depois, e ele esta indo no filtro perfeitamente

filtro

try {
					System.out.println("passei pelo filtro " + i);i++;
					em.getTransaction().begin();
					request.setAttribute("em", em);
					chain.doFilter(request, response);
					em.getTransaction().commit();
				} catch (Exception e) {
					em.getTransaction().rollback();
				}finally{
					em.close();
				}

BriefingDAO

public Briefing merger(Briefing briefing){
		return this.dao.merger(briefing);
	}

DAO

T merger(T entidade){
		entidade = this.em.merge(entidade);
		return entidade;
	}
dev.rafael

Vc está criando o EntityManager através do Persistence.createEntityManagerFactory(String).createEntityManager()?

dijava

sim, o erro nao é com entityManager estou inserindo e consultando sem problemas ! meu crud esta parcial pq ainda estou fazendo as telas, mas acho q o erro deve ser no jsf !

dev.rafael

Kra eu vou chutar mas, se vc achou q os seus getters e setters são tão simples q ñ mereciam aprecer no código q vc postou aqui então me parece q vc se esqueceu de setar o id na entidade briefing do seu ManagedBean.

dijava

meu get e set do briefing, na hora que chega no meu metodo “atualizar()” o objeto esta perfeito so nao esta atualizando no banco isso q esta me intrigando !

public Briefing getBriefing() {
		if(briefing == null){
			BriefingDAO dao = new BriefingDAO(getEm());
			this.briefing = dao.busca(Integer.parseInt(getId()));
		}
	
		return briefing;
	}
	public void setBriefing(Briefing briefing) {
		this.briefing = briefing;
	}
dev.rafael

Como está configurada a anotação @WebFilter desse seu “filtro de transação”?

dijava

ainda nao estou usando injecao em nada, o meu filtro esta o tradicional “implements Filter” do javax.servlet.Filter esta filtrando “/” ou seja tudo !

dev.rafael

Ok, mas como vc configurou o Filter p/ interceptar requisições, tipo, Vc configurou o Filter com anotação @WebFilter ou com o web.xml e como estão essas configurações, tem como postar ai?

dijava
<filter>
    <filter-name>EntityManagerFiltro</filter-name>
    <filter-class>br.com.eu.projeto.filtro.EntityManagerFiltro</filter-class>
  </filter>
<filter-mapping>
    <filter-name>EntityManagerFiltro</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
dev.rafael

Td q vc postou aqui até agora parece estar corréto. O problema deve estar em outra parte do código.

dijava

deve ser algum detalhezinho q nao devo estar olhando, amanha vou fzr uns testes e volto a postar aqui !

dijava

bom mudei o scopo de view para request, e passei o id como parametro pelo commandButon e funcionou !!!, fiz isso como teste, mas quero saber o motivo de nao funcionar o merger qnd managedBean esta como viewScope ?

dijava

respondido no post http://www.guj.com.br/posts/list/224290.java#1148737

Criado 5 de novembro de 2010
Ultima resposta 11 de nov. de 2010
Respostas 14
Participantes 2