Olá, estou utilizando o VRaptor com Ajax e gostaria de saber como passar parametros para a classe logic, de forma assincrona ele não consegue pegar os valores com a anotação @Parameter.
Meu JSP:
<script>
function ajaxRequest() {
var url = 'pedidocompra.listPedidoCompra.ajax.logic';
alert($F('codigoPedido'));
var codigoPedido = $F('codigoPedido');
//create the ajax request
var myAjax = new Ajax.Request(
url,
{
method: 'get',
parameters: codigoPedido,
onComplete: showResponse
}
);
}
//ajax callback method
function showResponse(data) {
//get the jsonObject
var jsonObject = eval('(' + data.responseText + ')');
//get the user array from the json object
var pedidos = jsonObject.pedidos;
//update html
var html ="<tr>";
var total = 0;
html+="<table width='100%'>";
html+="<tr>";
html+="<td colspan='2'><b>Razão Social</b></td>";
html+=" <td><b>Nome Fantasia</b></td>";
html+=" <td colspan='2'><b>CNPJ</b></td>";
html+="</tr>";
html+="<tr>";
html+=" <td colspan='2'>"+ pedidos[0].razaoSocial + "</td>";
html+=" <td>"+ pedidos[0].nomeFantasia + "</td>";
html+=" <td colspan='2'>"+ pedidos[0].cnpj + "</td>";
html+="</tr>";
html+="<tr>";
html+=" <td colspan='5'><b>Endereço para Coleta</b></td>";
html+="</tr>";
html+="<tr>";
html+=" <td colspan='5'>"+ pedidos[0].enderecoColeta + "</td>";
html+="</tr>";
html+="<tr>";
html+=" <td colspan='2'><b>Nº Pedido</b></td>";
html+=" <td><b>Data de Emissão</b></td>";
html+=" <td colspan='2'><b>Data de Coleta</b></td>";
html+="</tr>";
html+="<tr>";
html+=" <td colspan='2'>"+ pedidos[0].numeroPedido + "</td>";
html+=" <td>"+ pedidos[0].dataEmissao + "</td>";
html+=" <td colspan='2'>"+ pedidos[0].dataColeta + "</td>";
html+="</tr>";
html+="<tr>";
html+=" <td colspan='5'> </td>";
html+="</tr>";
html+="</table>";
//Itens
html+="<table width='100%' bordercolor='#396666' bordercolordark='white' cellpadding='1' cellspacing='0' rules='rows' frame='below'>";
html+="<tr>";
html+=" <td colspan='6' align='center'>LISTA DE ITENS PARA COMPRA</td>";
html+="</tr>";
html+="<tr>";
html+=" <td width='40'><b>Cód.</b></td>";
html+=" <td width='200'><b>Descrição do Item</b></td>";
html+=" <td><b>Bloc.</b></td>";
html+=" <td><b>Qtde. Esperada</b></td>";
html+=" <td><b>Qtde. Recebida</b></td>";
html+=" <td><b>Unitário</b></td>";
html+=" <td><b>Total</b></td>";
html+="</tr>";
//Lista de itens para compra
for(i=0;i<pedidos.length;i++) {
html+="<tr>";
html+=" <td width='40'>"+ pedidos[i].codigoPedido + "</td>";
html+=" <td width='200'>" + pedidos[i].descricaoIten + "</td>";
html+=" <td>" + pedidos[i].blocagem + "</td>";
html+=" <td>" + pedidos[i].quantidadeEsperada + "</td>";
html+=" <td><input type='text'></td>";
html+=" <td>" + pedidos[i].unitario + "</td>";
html+=" <td>" + pedidos[i].total + "</td>";
total+=pedidos[i].total;
html+="</tr>";
}
html+="<tr>";
html+=" <td colspan='5'> Total de Itens: "+ pedidos.length + "</td>";
html+=" <td>Total Geral: " + total + "</td>";
html+="</tr>";
html+="</table>"
var div = document.getElementById("ajaxResultDiv");
div.innerHTML = html;
}
</script>
</head>
<body>
<form name="frmPedido" action="pedidocompra.listPedidoCompra.ajax.logic" method="get">
<table border="0" width="100%" cellpadding="1">
<tr>
<td width="150">Entrada de Pedido</td>
<td width="120">
<input type="text" name="codigoPedido">
</td>
<td class="tdbottom" valign="bottom" align="left">
<input type="button" value="ok" name="click" onclick="javascript:ajaxRequest();" >
<input type="submit" value="teste">
</td>
<td class="tdbottom" valign="bottom" align="right" colspan="2">
<input type="button" value="sair">
</td>
</tr>
<tr>
<td colspan="5"> </td>
</tr>
<tr>
<td colspan="5" align="center">DADOS DO FORNECEDOR</td>
</tr>
<tr>
<td colspan="5">
<table width="100%" border="1">
<tr>
<td width="100%">
<div id="ajaxResultDiv"></div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body >
</html>
No botão ok eu chama via Ajax e no teste eu submeto o form normal e funciona, estou utilizando o prototype também.
Classe Logic
package br.com.xpto.logic;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.Parameter;
import org.vraptor.annotations.Remotable;
import br.com.xpto.model.PedidoCompra;
//Anotação para registrar a classe de negócio
@Component
public class PedidoCompraLogic {
//Anotação para obter os dados do request
@Parameter
int codigoPedido;
private List<PedidoCompra> pedidos;
//Anotação para exibir no formato JSON
@Remotable
public void listPedidoCompra() throws Exception {
System.out.println("codigo pedido " + codigoPedido);
Format formatter;
Date date = new Date();
formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
String s = formatter.format(date);
pedidos = new ArrayList<PedidoCompra>();
//simulando os pedidos do bd
for (int i = 1; i < 8; i++) {
pedidos.add(new PedidoCompra("Razaão teste" + i,"Nome fantasia" + i,"37179183386763","Endereço coleta" + i,999+i,s,s,i,"Teste Item"+ i,100+i,i+10,10.5+i,20.2+i));
}
}
public List<PedidoCompra> getPedidos() {
return pedidos;
}
}