Problema injeção de independencia no webwork

2 respostas
filipeandrep

Estou com uma aplicação que utiliza webwork e hibernate. Após receber os dados do formulário e setar outros valores em algumas propriedades não são persistidos os campos que são alterados no controlador.

segue o código:

UsuarioDAO daoUsuario = DAOFactory.getDefaultInstance().getUsuarioDAO();
		GenericDAOFactory<Perfil> fac2 = new GenericDAOFactory<Perfil>(
				Perfil.class, GenericDAOFactory.HIBERNATE);
		DAO<Perfil> daoPerfil = fac2.getGenericDAO();

		GenericDAOFactory<Municipio> fac3 = new GenericDAOFactory<Municipio>(
				Municipio.class, GenericDAOFactory.HIBERNATE);
		DAO<Municipio> daoMunicipio = fac3.getGenericDAO();

		Usuario tmp = daoUsuario.carrega(usuario.getLogin());
		String result = "success";

		// Esse login j� existe!!!
		if (tmp != null) {
			erro = "O login que voc&ecirc; escolheu j&aacute; existe. Por favor, retorne &agrave; etapa de cadastramento e escolha outro login.";
			return "erro_login_existente";
		}

		if (!usuario.getSenha().equalsIgnoreCase(senha2)) {
			erro = "A senha que voc&ecirc; forneceu n&atilde;o confere com a senha confirmada. Por favor, volte para seu cadastro, digite novamente sua senha e confirme corretamente.";
			return "erro_insercao";
		}
		usuario.setSenha(getDigest(usuario.getSenha().toLowerCase()));
		usuario.setNivel(new Nivel());
		endereco.setEstado(Estado.valueOf(estado));
		endereco.setMunicipio(daoMunicipio.carrega(new Long(municipio)));
		/*
		 * Coloca o perfil desejado no campo de observação para que quando o
		 * usuário for liberado seja verificado se é possível ou não o usuário
		 * ter este perfil
		 */
		if (!perfil.equals("-1")) {
			usuario.setObservacao(usuario.getObservacao()
					+ " perfil desejado: "
					+ daoPerfil.carrega(new Long(perfil)).getNome());
			result = "configura_nivel";
		}
		 
		/*
		 * Busca o perfil pendente (da AdminServlet.PENDENTES e grava o usuario
		 * com esse perfil
		 */
		List<Criterion> crits = new LinkedList<Criterion>();
		crits.add(Expression.ilike("nome", AdminServlet.PENDENTES));
		List<Perfil> perfis = daoPerfil.listarSemPermissao(crits);
		Set<Perfil> perfisSet = new HashSet<Perfil>();

		if (perfis.size() > 0) {
			perfisSet.add(perfis.get(0));
			usuario.setPerfis(perfisSet);
		}
		usuario.setEndereco(endereco);
		usuario.setAtivo(false);
		id = daoUsuario.salva(usuario).longValue();

		return result;

por favor me ajudem se puderem...

2 Respostas

R

Perae :idea:

O seu problems é a injeção de alguma dependência, como um bean, datasource, etc ? Ou é efetivamente na persistência do objeto ?

Se for na persistência, me responde um a coisa, você tá fazendo algum controle de transação ?

[]´s

filipeandrep

Rafael,

penso eu que o problema esta sendo na injeção de independencia.... entretanto posso estar errado. Segue o código da bean de persistência o campo que não está sendo salvo é o de observação.

package br.gov.inca.rhcnet;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratorType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.UniqueConstraint;

import org.apache.log4j.Logger;

import br.gov.inca.rhcnet.nivel.Nivel;
import br.gov.inca.rhcnet.nivel.filtro.FiltroDeNivel;
import br.gov.inca.rhcnet.seguranca.Perfil;

/**
 * <p>
 * Representa um usu�rio do sistema
 * </p>
 * 
 */
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = { "login" }))
@FiltroDeNivel(estadual="endereco.estado", municipal="endereco.municipio",institucional="nivel", nacional="")
public class Usuario {

    private long id;
    
    private boolean ativo = true;
    
    private boolean apagavel = true;
    
    private boolean editavel = true;

    private String login = "";

    private String senha = "";

    private String nome = "";

    private String email = "";
    
    private String ddd = "";
    
    private String telefone = "";
    
    private String dddCel = "";
    
    private String celular = "";
    
    private Nivel nivel = new Nivel();

    private Endereco endereco = new Endereco();

    private Logger log = Logger.getLogger(Usuario.class);
    
    private String observacao = "";
    

    /**
     * <p>
     * Conjunto de Perfis deste usu�rio
     * </p>
     * 
     */
    private Set<Perfil> perfis = new HashSet<Perfil>();

    /**
     * <p>
     * Construtor padr�o usado pela camada de persist�ncia
     * </p>
     * 
     * N�o deve ser usado para outro fim, por isso n�o � p�blico.
     */
    public Usuario() {
    }

    public Usuario(String login, String senha) {
        this.login = login;
        this.senha = senha;
    }

    public Usuario(String login, String senha, String nome) {
        this(login, senha);
        this.nome = nome;
    }

    @Id(generate = GeneratorType.AUTO)
    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @OneToOne(cascade=CascadeType.ALL)
    public Endereco getEndereco() {
        return endereco;
    }

    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }

    // @todo Rever o CascadeType
    @ManyToMany(fetch=FetchType.LAZY)
    // (cascade = CascadeType.ALL)
    public Set<Perfil> getPerfis() {
        return perfis;
    }

    public void setPerfis(Set<Perfil> perfis) {
        this.perfis = perfis;
    }

    public void adicionaPerfil(Perfil perfil) {
        this.perfis.add(perfil);
    }



    /**
     * Dois usu�rios s�o considerados iguais quando possu�rem o mesmo login
     * (username).
     */
    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Usuario) {
            Usuario usuario = (Usuario) obj;
            return this.login.equals(usuario.getLogin());
        }

        // nem � um Usuario!
        return false;
    }

    /**
     * Para a gera��o do hashCode � considerado apenas o login.
     */
    @Override
    public int hashCode() {
        return login.hashCode();
    }

	public Boolean isAtivo() {
		return ativo;
	}

	public void setAtivo(Boolean ativo) {
		this.ativo = ativo;
	}

	@OneToOne(cascade = CascadeType.ALL)
	public Nivel getNivel() {
		return nivel;
	}

	public void setNivel(Nivel nivel) {
		this.nivel = nivel;
	}
	
	public void setApagavel(boolean b){
		apagavel = b;
	}
	
	public boolean isApagavel(){
		return apagavel;
	}

	public boolean isEditavel() {
		return editavel;
	}

	public void setEditavel(boolean editavel) {
		this.editavel = editavel;
	}
	
	public String getCelular() {
		return celular;
	}

	public void setCelular(String celular) {
		this.celular = celular;
	}

	public String getDdd() {
		return ddd;
	}

	public void setDdd(String ddd) {
		this.ddd = ddd;
	}

	public String getDddCel() {
		return dddCel;
	}

	public void setDddCel(String dddCel) {
		this.dddCel = dddCel;
	}

	public String getTelefone() {
		return telefone;
	}

	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

	public String toString(){
		return nome;
	}
	
	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

}
Criado 4 de maio de 2007
Ultima resposta 4 de mai. de 2007
Respostas 2
Participantes 2