Iniciando com struts 2

Ola! estou começando a entender o struts 2… gostaria da ajuda de vcs!
estou tentando fazer um cadastro simples. Estou usando o netbeans 8.0.1
o que pode esta errado ae?
Class action.

[code]public class CadastraUsuarioAction extends ActionSupport {

private Usuario user;

@Override
public String execute(){
    Hdao dao = new Hdao();
    user.setNome("");
    user.setSenha("");
    dao.inserir(user);
    return SUCCESS;

}


public Usuario getUser() {
    return user;
}


public void setUser(Usuario user) {
    this.user = user;
}

}[code]
Class persistence

[quote]
@Entity
public class Usuario implements Serializable {

@Id
@GeneratedValue
private Long id;
private String nome;
private String senha;

public Long getId() {
    return id;
}

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

public String getNome() {
    return nome;
}

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

public String getSenha() {
    return senha;
}

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

}[/code] formulario jsp[code]
<%@ taglib prefix=“s” uri="/struts-tags" %>

Testando struts 2
<body>
    <s:form action="Teste">
      Nome:   <s:textfield name="nome" key="nome"/>
      Senha:  <s:textfield name="senha" key="senha"/>
        <s:submit value="enviar"/>
    </s:form>
</body>
[/code]Struts.xml [code] /teste.jsp /erro.jsp [/code] Dao[code] public class Hdao { Object bejeto; Session session;
public Hdao(){
    this.session = HibernateUtil.getSession();
}

public boolean inserir(Object obj){
    try{
    this.session.beginTransaction();
    this.session.saveOrUpdate(obj);
    this.session.getTransaction().commit();
    return true;
    }catch(Exception e){
        e.printStackTrace();
        return false;
        
    }

}

public boolean deleta(Object obj){
    try{
        this.session.beginTransaction();
        this.session.delete(obj);
        this.session.getTransaction().commit();
        return true;
    }catch(Exception e){
        return false;
    }
}

public boolean alterar(Object obj) {
   try{
    this.session.beginTransaction();
    this.session.update(obj);
    this.session.getTransaction().commit();
    return true;
    }
    catch(Exception e)
    {
        return false;
    }
}
public <T> List<T> buscar(Class<T> c) {
    this.session.beginTransaction();
    try {
        return this.session.createCriteria(c).list();
    } catch (Exception e) {
        return null;
    } finally {
        this.session.getTransaction().commit();
    }
}
 public List buscar(String filtro, Object value, boolean ifvalueString, Object obj) {

   if(ifvalueString)
   { value = "%"+value+"%";}
  try{
    this.session.beginTransaction();
    List list =  this.session.createCriteria(obj.getClass()).add(Restrictions.like(filtro, value)).list();
    this.session.getTransaction().commit();
    return list;
    }
    catch(Exception e)
    {
        return null;
    }
}
  public Object buscarUnidade(String filtro, Object value, boolean ifvalueString, Object obj) {

   //if(ifvalueString)
   //{ value = "%"+value+"%";}
  try{
    this.session.beginTransaction();
    Object list =  this.session.createCriteria(obj.getClass()).add(Restrictions.like(filtro, value)).uniqueResult();
    this.session.getTransaction().commit();
    return list;
    }
    catch(Exception e)
    {
        return null;
    }
}
  public Object buscar(Object obj, int id) {
    try{
    this.session.beginTransaction();
    obj = this.session.load(obj.getClass(), id);
    this.session.getTransaction().commit();
    return obj;
    }
    catch(Exception e)
    {
        return null;
    }
}

}[/code]