Olá, estou estudando o vraptor e comecei a desenvolver um aplicativo.
Cadastro de usuarios ---- departamento.
cada usuário só pode ser lotado em 1 departamento, mas 1 departamento pode ter n usuários.
fiz o adicionar/remover/editar departamento tranquilo.
quando comecei a fazer o cadastro de funcionário que preciso listar todos os departamentos para que o seja escolhido um para lotar o usuário que acabou dando problema.
Não consigo listar os departamentos no form de cadastro de usuário.
Vou colocar meus modelos, logicas e jsp abaixo.
:?
Departamento
package br.com.click.modelo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Departamento {
@Id
@GeneratedValue
private Long id;
private String nome;
private String descricao;
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 getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
}
Usuario
package br.com.click.modelo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
@Entity
public class Usuario {
@Id
@GeneratedValue
private Long id;
private String nome;
private String login;
private String senha;
@ManyToOne
private Departamento departamento;
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 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 Departamento getDepartamento() {
return departamento;
}
public void setDepartamento(Departamento departamento) {
this.departamento = departamento;
}
}
depois mapiei no hibernate.cfg.xml
e rodei a classe gerabanco.
package br.com.click.util;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class GeraBanco {
public static void main(String[] args) {
Configuration conf = new AnnotationConfiguration();
conf.configure();
SchemaExport se = new SchemaExport(conf);
se.create(true, true);
}
}
em seguida criei departamentoLogic
package br.com.click.logic;
import java.util.List;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.InterceptedBy;
import org.vraptor.annotations.Out;
import br.com.click.dao.DaoFactory;
import br.com.click.modelo.Departamento;
@Component("departamento")
@InterceptedBy(DaoInterceptor.class)
public class DepartamentoLogic {
private final DaoFactory daoFactory;
@Out
private Departamento departamento;
private List<Departamento> departamentos;
public DepartamentoLogic(DaoFactory daoFactory){
this.daoFactory = daoFactory;
}
//formulario de adição
public void formulario(){
}
public void editar(Departamento departamento) {
//carrega os dados do banco para edição
this.departamento = this.daoFactory.getDepartamentoDao().procura(departamento.getId());
}
public void armazena(Departamento departamento) {
this.daoFactory.beginTransaction();
this.daoFactory.getDepartamentoDao().atualiza(departamento);
this.daoFactory.commit();
}
public void remove(Departamento departamento) {
this.daoFactory.beginTransaction();
this.daoFactory.getDepartamentoDao().remove(departamento);
this.daoFactory.commit();
}
public void lista() {
this.departamentos = this.daoFactory.getDepartamentoDao().listaTudo();
}
public Departamento getDepartamento(){
return departamento;
}
public List<Departamento> getDepartamentos() {
return departamentos;
}
}
Até aqui tava tudo funcinando direito…
Adicionando / removendo e editando departamento sem problemas.
Quando passei para a parte de Usuários é que o problema começou.
package br.com.click.logic;
import java.util.List;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.InterceptedBy;
import org.vraptor.annotations.Out;
import br.com.click.dao.DaoFactory;
import br.com.click.modelo.Departamento;
import br.com.click.modelo.Usuario;
@Component("usuario")
@InterceptedBy(DaoInterceptor.class)
public class UsuarioLogic {
private final DaoFactory daoFactory;
@Out
private Usuario usuario;
private List<Usuario> usuarios;
public UsuarioLogic(DaoFactory daoFactory){
this.daoFactory = daoFactory;
}
public void formulario(){
}
public void editar(Usuario usuario) {
this.usuario = this.daoFactory.getUsuarioDao().procura(usuario.getId());
}
//adiciona ou atualiza
public void armazena(Usuario usuario) {
this.daoFactory.beginTransaction();
this.daoFactory.getUsuarioDao().atualiza(usuario);
this.daoFactory.commit();
}
public void remove(Usuario usuario) {
this.daoFactory.beginTransaction();
this.daoFactory.getUsuarioDao().remove(usuario);
this.daoFactory.commit();
}
public void lista() {
this.usuarios = this.daoFactory.getUsuarioDao().listaTudo();
}
public Usuario getUsuario(){
return usuario;
}
public List<Usuario> getUsuarios() {
return usuarios;
}
//usado para popular o select
public List<Departamento> getListaDepartamento() {
return this.daoFactory.getDepartamentoDao().listaTudo();
}
}
form.ok.jsp
<form action="usuario.armazena.logic" method="post">
<fieldset>
<legend>Dados Cadastrais</legend>
<input type="hidden" name="usuario.id" value="${usuario.id}"/>
Departamento:
<select name="usuario.departamento.id">
<c:forEach var="departamento" items="${listaDepartamentos}">
<option value="${departamento.id}">${departamento.nome}</option>
</c:forEach>
</select>
<table>
<tr>
<td>Nome:</td>
<td><input type="text" name="usuario.nome" value="${usuario.nome}" /></td>
</tr>
<tr>
<td>Login:</td>
<td><input type="text" name="usuario.login" value="${usuario.login}" /></td>
</tr>
<tr>
<td>Senha:</td>
<td><input type="password" name="usuario.senha" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" /></td>
</tr>
</fieldset>
</table>
</form>
O formulario roda, sem dar erro nenhum, mas a caixa de seleção que era pra conter os departamentos vem vazia.
Se adiciono um usuario ele fica sem departamento.
Alguem tem idéia de onde eu deslizei?
Abraço.
Obrigado.
