Passar ojeto na url com VRaptor [RESOLVIDO]

10 respostas
Edifran

Pessoal, não sei se o titulo do post seria realmente esse, mas o que eu estou querendo fazer é cadastrar endereços para um determinado cliente.
Ja tenho o cadastro de clientes funcionando legal, seguindo um turorial do vraptor, o cadastro de clientes está com esses metodos funcionando ok.

@Get
    @Path("/clientes/novo")
    public void formulario() {
    }
..
..
..
  @Post
    @Path("/clientes")
    public void adiciona(final Cliente cliente, boolean validarcpf) {
....
.....
 
    @Get
    @Path("/clientes/{id}")
    public Cliente edita(Long id) {
        return (Cliente) dao.carregaPorId(id);
    }

Eu quero fazer o cadastro de enderecos para o cliente mas não consigo passar cliente para o meu formulario de cadastro de endereços.

No meu enderecosControler eu fiz isso:

@Get
    @Path("/clientes/enderecos/novo/{cliente}")
    public void formulario() {
         }

No meu jsp de clientes (editar) eu fiz isso:

<a href="<c:url value="/clientes/enderecos/novo/${cliente }"/>">Novo Endereço</a>

No formulario de endereços eu fiz isso:

<input type="hidden" name="clienteEndereco.idCliente" value="${cliente.id }" />
        <input id="cliente" type="text" readonly name="cliente.nome" value="${cliente.nome }"/>

mas não funciona.

Alguém pode me dar um help?

Agradecido.

10 Respostas

Lucas_Cavalcanti

passar o objeto inteiro geralmente não vai ser o que vc quer…

o ideal é passar só o id mesmo, e usar o id pra buscar todas as informações do cliente e mostrar na tela.

Edifran

Lucas Cavalcanti, obrigado por essa resposta, mas…
Eu devo estar fazendo algo errado, eu até consigo passar o id, mas não consigo setar ele no hidden do meu jsp de endereços
Fiz um teste, só pra ver se eu estava passando mesmo o id assim:

@Get
    @Path("/clientes/enderecos/novo/{id}")
    public void formulario(Long id) {
        
        System.out.println(""+ id);
    }

Mas como eu seto esse id no meu jsp?
Fiz uns testes assim, mas não seta

<input type="hidden" name="idCliente" id="idCliente" value="${id}" />
 <input type="hidden" name="clienteEndereco.idCliente" value="${cliente.id }" />

Se puder me ajudar, agradecido.

Lucas_Cavalcanti

se vc declarou que vai receber na url, vc precisa passar na url, no mesmo lugar onde vc pediu:

<a href="<c:url value="/clientes/enderecos/novo/${cliente.id}"/>">Link</a>
Edifran

No meu jsp de clientes eu passo nessa url certinho.

Mas no meu jsp de enderecos eu fiz isso com o intuito de receber o ${cliente.id}

<input type="hidden" name="clienteEndereco.idCliente" value="${cliente.id }" />

Eu preciso ter algo no meu controller de enderecos para carregar o cliente e passar para o formulário?

Abraço.

Lucas_Cavalcanti

não é pra passar o input hidden, é pra passar o id na URL!

Edifran

Lucas, desculpe a insistência (talvez ignorância), mas eu já estou fazendo da forma que você me instruiu.

Eu tenho um formulario onde eu edito os dados do meu cliente, e nesse formulario eu tenho um link para o cadastro de endereços para cadastrar um endereço a ele, no formulário em que eu edito os dados dos cliente eu faço isso:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@include file="/cabecalho.jsp" %>
<form action="<c:url value="/clientes/${cliente.id }"/>" method="POST">
    <fieldset>
        <legend>Editar cliente</legend>
        <input type="hidden" name="cliente.id" value="${cliente.id }" />
        <label for="nome">Nome:</label>
        <input id="nome" type="text" name="cliente.nome" value="${cliente.nome }"/><br>
        <label for="cpf" >CPF:</label>
        <input id="cpf" name="cliente.cpf" value="${cliente.cpf }"/><input type="checkbox" id="validarcpf" name="validarcpf" title="Validar este CPF/CNPJ" checked><br>
        <label for="email">Email:</label>
        <input id="email" type="text" name="cliente.email" value="${cliente.email }"/><br>
        <button style="font-size: large" type="submit" name="_method" value="PUT">Enviar</button>
        <a href="<c:url value="/clientes"/>"><input style="font-size: large" type="button" value="Cancelar"></a>
        <a href="<c:url value="/clientes/enderecos/novo/${cliente.id}"/>">Novo Endereço</a>  
    </fieldset>
</form>
<%@include file="/rodape.jsp" %>

Que me encaminha pra outro formulario, o de cadastro de endereços
Aquele campo input hidden eu tenho nesse formulario de cadastro de endereços. mas eu preciso que este parametro ${cliente.id } vá pra ele:
Formulario de cadastro de endereços.

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@include file="/cabecalho.jsp" %>
<form action="<c:url value="/clientes/enderecos"/>" method="POST">
   
    <fieldset>
        <legend>Adicionar Endereço</legend>
        <input type="hidden" name="clienteEndereco.idCliente" value="colocar_o_valor_do_id_cliente_passado_na_url" />
        <label for="endereco">Endereço:</label>
        <input id="endereco" type="text" name="clienteEndereco.endereco" value="${clienteEndereco.endereco }"/><br>
        <label for="numero">Número</label>
        <input id="numero" name="clienteEndereco.numero" value="${clienteEndereco.numero }"/><br>
        <label for="cep">CEP:</label>
        <input id="cep" type="text" name="clienteEndereco.cep" value="${clienteEndereco.cep }"/><br>
        <label for="cidade">Cidade:</label>
        <input id="cidade" type="text" name="clienteEndereco.cidade" value="${clienteEndereco.cidade }"/><br>
        <button style="font-size: large"  type="submit">Enviar</button>
        <a href="<c:url value="/clientes/enderecos"/>"><input style="font-size: large" type="button" value="Cancelar"></a>
    </fieldset>
</form>
<%@include file="/rodape.jsp" %>

Tem algo errado no meu conceito?

Muito obrigado.

Lucas_Cavalcanti

não…

então vc precisa fazer algo do tipo:

@Get  
        @Path("/clientes/enderecos/novo/{id}")  
        public void formulario(Long id) {  
            result.include("clienteId", id);
        }

e no seu formulario vc acessar esse id por ${clienteId}

Edifran

Lucas, beleza, era isso mesmo, eu já havia tentado fazer isso, mas estava pegando de forma errada no meu formulário.
Se eu quiser por exemplo mostrar o nome do cliente nesse formulário de endereços eu preciso consultar o cliente pelo id e mandar o mone dele para um campo no formulário.

Essa consulta pelo id deve ser feita nesse método mesmo, ou esta forma estaria errada?

@Get    
        @Path("/clientes/enderecos/novo/{id}")    
        public void formulario(Long id) {    
            result.include("clienteId", id);
            /** consultar o cliente aqui **/
            result.include("clienteNome", cliente.getNome());  
        }

Desde já agradeço a sua atenção.

Lucas_Cavalcanti

sim, vc faria a consulta aí… já que vc vai fazer a consulta vc pode fazer direto:

result.include("cliente", cliente);

e no jsp usar ${cliente.nome}, ${cliente.id}, etc

Edifran

Lucas, valeu cara, deu certinho.

Muito obrigado mesmo.

Criado 9 de junho de 2012
Ultima resposta 11 de jun. de 2012
Respostas 10
Participantes 2