Dúvidas de um iniciante em Vraptor

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.