Esta é minha action, que irá processar os dados da página jsp.
@Validation
@Results( { @Result(name = "success", value = "/paginas/jsp/usuario.jsp"),
@Result(name = "input", value = "/paginas/jsp/usuario.jsp"),
@Result(name = "listAll", value = "/paginas/jsp/listaUsuarios.jsp") })
public class UsuarioAction extends ActionSupport {
private Usuario usuario = new Usuario();
private CentroDAO centroDAO = Factory.criaCentroDAO();
private UsuarioDAO usuarioDAO = Factory.criaUsuarioDAO();
public List<Centro> getListaCentros() throws Exception {
HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();
List<Centro> centros = centroDAO.centrosPorSituacao("A");
HibernateUtil.getSessionFactory().getCurrentSession().getTransaction().commit();
return centros;
}
public String inserir() throws Exception {
HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();
if (usuario.getId() > 0) {
try {
usuarioDAO.update(usuario);
addActionMessage("Usuário alterado com sucesso");
usuario = new Usuario();
}
catch (Exception e) {
e.printStackTrace();
HibernateUtil.getSessionFactory().getCurrentSession().getTransaction().rollback();
addActionError("Erro atualizando usuário. Causa: " + e.getCause());
}
}
else {
try {
usuarioDAO.insert(usuario);
addActionMessage("Usuário inserido com sucesso");
usuario = new Usuario();
}
catch (ConstraintViolationException ex) {
addActionError("Já existe um usuário com o id " + usuario.getCodUsu());
HibernateUtil.getSessionFactory().getCurrentSession().getTransaction().rollback();
}
catch (Exception e) {
e.printStackTrace();
HibernateUtil.getSessionFactory().getCurrentSession().getTransaction().rollback();
addActionError("Erro inserindo usuário. Causa: " + e.getCause());
}
}
HibernateUtil.getSessionFactory().getCurrentSession().getTransaction().commit();
// preenche();
return INPUT;
}
}
Este é o form da minha página jsp:
<s:form name="frmUsuario" action="usuario!inserir" validate="true" namespace="/" method="POST">
<s:textfield name="usuario.id" readonly="true" label="Id" />
<s:textfield name="usuario.codUsu" label="Login" size="30" theme="ajax" />
<s:textfield name="usuario.senUsu" label="Senha" size="30" />
<s:textfield name="usuario.przLan" label="Prazo de lançamento" size="10" />
<s:textfield name="usuario.eMail" label="E-mail" size="50" />
<s:checkboxlist list="%{listaCentros}" label="Centros Permitidos" name="usuario.centrosPermitidos"
listKey="id" listValue="nomCcu"></s:checkboxlist>
<s:submit value="Gravar" notifyTopics="listaUsuariosTopic" align="center" />
</s:form>
Este é minha classe de usuário:
public class Usuario implements Serializable {
@Id
@GeneratedValue
private int id;
@Column(unique = true, length = 15)
private String codUsu;
@Column(length = 10)
private String senUsu;
@Enumerated(EnumType.STRING)
@Column(length = 15)
private TipoUsuario tipUsu;
private int przLan;
@ManyToOne
@JoinColumn(name = "id_col")
private Colaborador colaborador = new Colaborador();
@ManyToMany(fetch = FetchType.LAZY)
private Set<Centro> centrosPermitidos = new HashSet<Centro>();
@ManyToOne
@JoinColumn(name = "id_ger", referencedColumnName = "id")
private Usuario gerente;
private String eMail;
@OneToMany(mappedBy = "usuario", fetch = FetchType.LAZY)
private Set<Acesso> acessos = new HashSet<Acesso>();
static Logger logger = Logger.getLogger(Usuario.class);
public Set<Acesso> getAcessos() {
return acessos;
}
public void setAcessos(Set<Acesso> acessos) {
this.acessos = acessos;
}
@RequiredFieldValidator(message = "Login é um campo obrigatório")
public String getCodUsu() {
return codUsu;
}
public void setCodUsu(String codUsu) {
this.codUsu = codUsu;
}
@RequiredFieldValidator(message = "Senha é um campo obrigatório")
@StringLengthFieldValidator(minLength = "5", maxLength = "10", message = "Senha deve conter no mínimo ${minLength} e no máximo ${maxLength} caracteres ")
public String getSenUsu() {
return senUsu;
}
public void setSenUsu(String senUsu) {
this.senUsu = senUsu;
}
// @RequiredFieldValidator(type=ValidatorType.FIELD, message = "Tipo de
// usuário é um campo obrigatório.")
public TipoUsuario getTipUsu() {
return tipUsu;
}
//@TypeConversion(converter = "util.EnumTypeConverter")
public void setTipUsu(TipoUsuario tipUsu) {
logger.info("Setando tipo de usuário: " + tipUsu);
this.tipUsu = tipUsu;
}
@RequiredFieldValidator(message = "Prazo de lançamento é um campo obrigatório.")
public int getPrzLan() {
return przLan;
}
public void setPrzLan(int przLan) {
this.przLan = przLan;
}
@RequiredFieldValidator(message = "Gerente é um campo obrigatório.")
public Usuario getGerente() {
return gerente;
}
public void setGerente(Usuario gerente) {
this.gerente = gerente;
}
@RequiredFieldValidator(message = "E-mail é um campo obrigatório.")
@EmailValidator(message = "Digite um e-mail válido.")
public String getEMail() {
return eMail;
}
public void setEMail(String mail) {
eMail = mail;
}
public Usuario() {
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "Usuário :" + this.codUsu + " / Nome: " + this.colaborador.getNomFun();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Colaborador getColaborador() {
return colaborador;
}
public void setColaborador(Colaborador colaborador) {
this.colaborador = colaborador;
}
public Set<Centro> getCentrosPermitidos() {
return centrosPermitidos;
}
public void setCentrosPermitidos(Set<Centro> centrosPermitidos) {
this.centrosPermitidos = centrosPermitidos;
}
}
Eu gostaria de saber se estou "viajando", achando que o struts deveria pegar do checklistbox, o id de cada box selecionado e recuperar o objeto Centro com este id e colocar dentro da collection automaticamente...
Obrigada!!!