Struts2 + Hibernate + annotations

Olá amigos,
estou tentando fazer alguma coisa para web e me ocorreu um problema que gostaria de obter ajuda.

UsuarioAction

package intranet.eb.action;

import intranet.eb.model.Usuario;
import intranet.eb.service.UsuarioDAO;

import com.opensymphony.xwork2.ActionSupport;

public class UsuarioAction extends ActionSupport{

private static final long serialVersionUID = 1L;

private Usuario usuario;
private UsuarioDAO usuarioDao;

public UsuarioAction () {
	this.usuarioDao = new UsuarioDAO();
}

public Usuario getUsuario(){
	return usuario;
}

public void setUsuario (Usuario usuario){
	this.usuario = usuario;
}

public String insereUsuario() throws Exception{
	try {
		usuarioDao.insereUsuario(usuario);
	} catch (Exception e) {
		throw new Exception (e.getMessage());
	} 
	return SUCCESS;
}

}

eu até que consigo efetuar a inserção no banco de dados mas tudo null !
o que pode ter acontecido

Segue UsuarioDAO

/**

  • @author Édion Alberto Torres
  • Classe responsável pelo acesso do usuário ao banco de dados
  • Data: 27 de fevereiro de 2008 as 07:42 AM
    */

package intranet.eb.service;

import org.hibernate.Session;
import org.hibernate.Transaction;

import intranet.eb.model.Usuario;
import intranet.eb.util.HibernateUtil;

public class UsuarioDAO {

public void insereUsuario (Usuario usuario) throws Exception {	
	Session s = HibernateUtil.getSession();
	Transaction tx = null;
	Usuario user = new Usuario();
		try {
			tx = s.beginTransaction();
			s.save(user);
			tx.commit();
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		}finally {
			s.close();
		}
	}// FimMetodoInsereUsuario
}//FimClasseUsuarioDAO

Olá,

Não é possível saber ao certo, mas a primeira impressão que dá é que o Struts não está setando corretamente os dados da tua interface gráfica (camada view) dentro do objeto usuario. Verifique se as tags da página JSP (estou assumindo que é um JSP que você está usando) estão de acordo com o que você tem na action. Por exemplo, digamos que você tem uma caixa de texto na tua tela que o usuário informa o nome, você deve ter algo como:

<s:textfield name=“usuario.nome” />

Fazendo dessa forma, o Struts irá chamar os métodos getUsuario().setNome(), passando como parâmetro o nome fornecido, o que populará o seu objeto usuario.

Abraço

Boa Tarde!

Segue código do JSP

Identidade:

Nome:

Senha:

Confirme a senha:


so o que interessa é claro.

Preciso mapear alguma coisa no struts.xml ??

lembrando que a inserção funciona, mas nao com os dados que digitei.

Obrigado!

Olá,

Parece que está tudo ok. Não é necessário nenhum mapeamento no struts.xml para popular objetos.
Só confirme se no tua classe Usuario você tem os seguintes métodos:

[list]getNr_identidade()[/list]
[list]setNr_identidade()[/list]
[list]getNm_usuario()[/list]
[list]setNm_usuario()[/list]
[list]getSenha()[/list]
[list]setSenha()[/list]

Outra coisa: a action “insere” a qual você se refere na tag s:form do JSP está mapeada corretamente no struts.xml? Isto é, esta action invoca o método insereUsuario() da classe UsuarioAction? Sei que você disse que a inserção funciona (apesar do objeto não ser populado corretamente) mas quero entender melhor como funciona teu código.

Abraço

Olá amigo,
Segue o Usuario com os gets e sets.

Não faço a minima idéia do que está acontecendo

Agradeço a sua ajuda!

/**
*
*/
package intranet.eb.model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class Usuario implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id_usuario;

@Column
private String nr_identidade;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_posto_grad", referencedColumnName = "id_posto_grad")
private PostoGrad postoGrad;

@Column(length=60)
private String nm_usuario;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_secao", referencedColumnName = "id_secao")
private Secao secao;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_perfil", referencedColumnName = "id_perfil")
private Perfil perfil;

@Temporal(TemporalType.DATE)
private Date dt_cadastro;

@Column
private int status_cadastro;

@Column(length=40)
private String senha;


// get and sets

public int getId_usuario() {
	return id_usuario;
}

public void setId_usuario(int id_usuario) {
	this.id_usuario = id_usuario;
}

public String getNr_identidade() {
	return nr_identidade;
}

public void setNr_identidade(String nr_identidade) {
	this.nr_identidade = nr_identidade;
}

public PostoGrad getPostoGrad() {
	return postoGrad;
}

public void setPostoGrad(PostoGrad postoGrad) {
	this.postoGrad = postoGrad;
}

public String getNm_usuario() {
	return nm_usuario;
}

public void setNm_usuario(String nm_usuario) {
	this.nm_usuario = nm_usuario;
}

public Secao getSecao() {
	return secao;
}

public void setSecao(Secao secao) {
	this.secao = secao;
}

public Perfil getPerfil() {
	return perfil;
}

public void setPerfil(Perfil perfil) {
	this.perfil = perfil;
}

public Date getDt_cadastro() {
	return dt_cadastro;
}

public void setDt_cadastro(Date dt_cadastro) {
	this.dt_cadastro = dt_cadastro;
}

public int getStatus_cadastro() {
	return status_cadastro;
}

public void setStatus_cadastro(int status_cadastro) {
	this.status_cadastro = status_cadastro;
}

public String getSenha() {
	return senha;
}

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

public static long getSerialVersionUID() {
	return serialVersionUID;
}

}

só para uma análise melhor

segue struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
    <!-- Default interceptor stack. -->
    <default-interceptor-ref name="paramsPrepareParamsStack"/>
    
    <action name="insere" class="intranet.eb.action.UsuarioAction" method="insereUsuario">
        <result name="success">../index.jsp</result>
        <!-- we don't need the full stack here -->
        <interceptor-ref name="basicStack"/>
    </action>
</package>

Cara, achei o problema do teu código… Eu já devia ter percebido antes. Você está instanciando o objeto user tentando persisti-lo vazio. Na verdade você tem que usar o objeto que é recebido como parâmetro (usuario). Não tem necessidade de criar uma instância nova de Usuario. Assim deve funcionar:

s.save(usuario);

Acho que agora seus problemas serão resolvidos :smiley:

Abraços!

Era isso mesmo velho.
Resolvi agora pouco.

Entrei no forum só para dizer que tinha conseguido e vc ja tinha postado a resposta.

Valew mesmo!