Olá a todos,boa noite.
Venho iniciando meus estudos sobre o Vraptor3 me pareceu um ótimo framework rápido e prático,fiz meu primeiro CRUD sem problemas, no entanto quando se está aprendendo sempre surgem as dúvidas pelo meio do caminho,estava seguindo a postila da Caelum e alguns outros tutoriais na web .A primeira dúvida é (fig1) eu posso ter na mesma jsp a busca e a listagem? na apostila FJ28 temos a pagina de busca ai digitamos o valor do filtro e então é redirecionado para a página de resultado, eu gostaria de ter tudo isso em uma única jsp o usuário colocaria o valor dos filtros e mandava filtrar e então redirecionava pra mesma página apresentando os resultados.é possível?
Dúvida2 -Também seguindo o exemplo da apostila temos a busca de produtos por nome,mas e se eu tiver mais de um campo de busca? (fig 1)como por exemplo enviaria para o meu controller:
public List<Orgao>buscar(String cnpj,String nome,TipoOrgao tipoOrgao){
dao.find(.......
}
Dúvida 3 -parecida com a dúvida 1,em meus sistemas é bem comum em lógicas mestre-detalhe eu ter o form de edição da entidade e uma list da entidades filhas(fig 2) é tranquilo fazer isso com o vraptor? ter esse form e essa list na mesma jsp?ou tenho que usar includes?
Dúvida 4 - posso ter multiplos submits em uma mesma jsp?(fig 2)
Algumas perguntas podem parecer meio toscas mas acho válidas na questão aprendizagem, se puder contar com a ajuda dos amigos fico agreadecido.


Resposta 1: é possível, só incluir no result a lista que vc quer mostrar:
result.include("coisas", listaDeCoisas);
e montar essa lista lá na jsp com ${coisas}
Resposta 2: é isso mesmo, desde que os nomes dos inputs sejam os mesmos dos parametros
Resposta 3: tem que usar os includes, é tranquilo…
se quiser setar atributos numa listagem dá:
coisa.listagem[0].atributo = xxxx
coisa.listagem[0].outroAtributo = yyyy
coisa.listagem[1].atributo = yyyy
coisa.listagem[1].outroAtributo = yyyy
...
Resposta 4: sim, sem problema nenhum, isso em qualquer framework web.
Tranquilo Lucas Obrigadão , vou continuar implementamndo aqui e conforme as dúvidas forem surgindo eu vou postando aqui. Vlw!!
Oi Lucas ,para a dúvida 4 vamos supor a seguinte situação: tenho um sistema de auditoria de contratos, na tela de contrato o cliente pode apenas salvar o contrato clicando no botão “salvar” ou salvar o contrato e enviar para o auditor revisar clicando no botão “salvar e enviar” ambos utilizando POST
<form action="<c:url value="/contratos"/>"/>
<button type="submit" name="_method" value="POST">Salvar</button>
<button type="submit" name="_method" value="POST">Salvar e Enviar</button>
</form>
como enviar as ações para os métodos corretos no controller?
consegui fazer o formulário ter dois inputs do tipo submit e ambos fazendo post ,eu mudei a action do submit via javascript, no entanto eu acho a solução um pouco feia, gostaria mesmo de mapear diretamente as actions com os submits,sefor possível e alguem souber como fazer ficarei grato,mas enquanto isso se algém estiver com o mesmo problema aqui vai a solução com javascript:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<jsp:include page="/template/cabecalho.jsp" />
<h1>Cadastro de Filme</h1>
<form action="/locadora/filme/altera" method="post"><input
type="hidden" name="filme.id" value="${filme.id}" />
<table>
<tr>
<td>Nome</td>
<td><input type="text" name="filme.nome" value="${filme.nome}" />
</td>
</tr>
<tr>
<td>Categoria</td>
<td><select id="categorias" name="filme.categoria.id">
<option value="${filme.categoria.id}">${filme.categoria.nome}</option>
<c:forEach var="categoria" items="${listaCategorias }">
<option value="${categoria.id }">${categoria.nome }</option>
</c:forEach>
</select></td>
</tr>
<tr>
<td>Gênero</td>
<td><input type="text" name="filme.genero"
value="${filme.genero}" /></td>
</tr>
<tr>
<td>Ano</td>
<td><input type="text" name="filme.ano" value="${filme.ano}" /></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit"
value="Alterar" /> <input type="submit" value="Imprimir Ficha"
name="imprime"
onclick="this.form.action='/locadora/filme/imprime';this.form.submit();" />
</td>
</tr>
</table>
</form>
<jsp:include page="/template/rodape.jsp" />
@Resource
public class FilmeController {
private Result result;
private FilmeDao dao;
private CategoriaDao cdao;
public FilmeController(Result result, FilmeDao dao,CategoriaDao cdao){
this.result = result;
this.dao = dao;
this.cdao = cdao;
}
public void lista(){
List<Filme> lista = dao.listaTudo();
result.include("lista", lista);
}
@Path("/filme/lista") //Adiciona usuarios
@Post
public void lista(String nome){
List<Filme> lista = dao.busca(nome);
result.include("lista", lista);
}
public void form(){
result.include("listaCategorias", cdao.listaTudo());
}
public void imprime(){
System.out.println("===================REALIZA ALGUMA AÇÃO AQUI===================");
result.redirectTo(FilmeController.class).lista();
}
public void cadastra(Filme filme){
dao.salva(filme);
result.include("mensagem", "Filme adicionado com sucesso");
result.redirectTo(FilmeController.class).lista();
}
public void remove(Integer id){
Filme filme = dao.carrega(id);
dao.remove(filme);
result.redirectTo(FilmeController.class).lista();
}
public void altera(Filme filme){
dao.atualiza(filme);
result.include("mensagem", "Filme alterado com sucesso");
result.redirectTo(FilmeController.class).lista();
}
public void edita(Integer id){
Filme filme = dao.carrega(id);
result.include("filme", filme);
result.include("listaCategorias", cdao.listaTudo());
}
}
se vc der um nome pro input submit dá pra pegar esse valor lá no método… mas o valor vai ser “Salvar e Enviar”, e vc vai ter que fazer um if feio no método.
via javascript não é o ideal, mas funciona sim.