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.