[Resolvido]ComboBox usando VRaptor

Olá pessoal.

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

tenho uma classe Produto:

[code]
@Entity
public class Produto{
@Id
@GeneratedValue
private Long id;
private String nome;
private String descricao;
private Double preco;

// Getters e Setters.
}[/code]

E tenho a classe Loja (supondo que a loja só tenha 1 produto):

[code]
@Entity
public class Loja{
@Id
@GeneratedValue
private Long id;
private String nome;
private String descricao;

@ManyToOne
private Produto produto;

// Getters e Setters.
}[/code]

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.

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.

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…


o metodo include da classe Result, exporta os dados para a view, no  caso o jsp, e ele esta aqui:
[code]<c:forEach var="produto" items="${produtos}"></c:forEach> [/code]

Isso quer dizer que quase tudo que vc colocar no include, você pode esta pegando no seu jsp via JSTL:
No Controller:
[code]result.include("alguma_coisa", "TESTE")[/code]

No jsp.
[code]${alguma_coisa}[/code]
Nessa caso vai imprimir "TESTE" na sua jsp.


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

o metodo include da classe Result, exporta os dados para a view, no caso o jsp, e ele esta aqui:

Isso quer dizer que quase tudo que vc colocar no include, você pode esta pegando no seu jsp via JSTL:
No Controller:

No jsp.

Nessa caso vai imprimir “TESTE” na sua jsp.

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

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

É 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.

Ajudou bastante cara, muito obrigado!

Qualquer coisa, estamos por aqui.

Ajudou aqui tb, valeu galera.