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
ctosin
Março 2, 2008, 10:18pm
#2
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
ctosin
Março 3, 2008, 3:31pm
#4
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>
ctosin
Março 3, 2008, 8:28pm
#7
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
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!