[Resolvido]ComboBox usando VRaptor

8 respostas
Rafael_Guerreiro

Olá pessoal.

Eu tenho uma dúvida:
como crio uma ComboBox usando o VRaptor? Segue exemplo:

tenho uma classe Produto:
@Entity
public class Produto{
   @Id
   @GeneratedValue
   private Long id;
   private String nome;
   private String descricao;
   private Double preco;

   // Getters e Setters.
}
E tenho a classe Loja (supondo que a loja só tenha 1 produto):
@Entity
public class Loja{
   @Id
   @GeneratedValue
   private Long id;
   private String nome;
   private String descricao;

   @ManyToOne
   private Produto produto;

   // Getters e Setters.
}

Eu preciso que, na hora de cadastrar uma Loja, eu informe um produto já cadastrado.
Todos os produtos cadastrados ficam em uma comboBox.
Preciso saber como que fica a minha chamada ao ProdutoDAO (levando em conta a injeção de dependências do VRaptor),
e como eu coloco esses dados obtidos em uma comboBox.

Obrigado.

8 Respostas

D

Olá.
Então vamos por partes.

No seu controller:

@Resource
public class LojasController(){
	private final Result result;
	private final Produtos produtos;
	private final Lojas lojas;

	public LojasController(Result result, Produtos produtos, Lojas lojas){
		this.result = result;
		this.produtos = produtos;
		this.lojas = lojas;
	}
	
	//form.jsp
	@Get("/lojas")
	public void form(){
		result.include("produtos", produtos.todos());
	}
	
	@Post("/lojas")
	public void salvar(Loja loja){
		lojas.adicionar(loja);
		//...
	}

}

No form.jsp:

<label for="produtos">Selecione um produto:</label>
<select id="produtos" name="loja.produto.id" >
	<c:forEach var="produto" items="${produtos}">  
		<option value="${produto.id}"> ${produto.nome}</option>  
	</c:forEach>  
</select>

Bom isso é basicamente o que você precisa.

Rafael_Guerreiro

Não entendi muito bem como que funciona esse result.include("produtos", produtos.todos());

Eu estou tentando terminar a apostila FJ28 mas estou com muitos erros… Está meio difícil…

O problema do curso que eu vou fazer é que só começa no dia 18/04/2011… Está longe…

D
result.include("produtos", produtos.todos());
o metodo include da classe Result, exporta os dados para a view, no caso o jsp, e ele esta aqui:
<c:forEach var="produto" items="${produtos}"></c:forEach>
Isso quer dizer que quase tudo que vc colocar no include, você pode esta pegando no seu jsp via JSTL: No Controller:
result.include("alguma_coisa", "TESTE")
No jsp.
${alguma_coisa}
Nessa caso vai imprimir "TESTE" na sua jsp.

o produtos.todos(), é um metodo que busca na sua base de dados todos os seus produtos.

Rafael_Guerreiro

Entendi, e na hora de instanciar o meu ProdutoDAO eu uso a injeção de dependências ou instancio na mão mesmo?

D

É como esta no LojasController que coloquei como exemplo, ali as instancias de Produtos e Lojas, poderia ser ProdutoDAO e LojaDAO, somente dei um nome diferente. Dessa forma eles serão injetados no seu Controller desde que estejam anotados com @Component.

Rafael_Guerreiro

Ajudou bastante cara, muito obrigado!

D

Qualquer coisa, estamos por aqui.

raphael_pf

Ajudou aqui tb, valeu galera.

Criado 17 de março de 2011
Ultima resposta 30 de set. de 2011
Respostas 8
Participantes 3