Renderizar JSON na GSP
02/02/2009 00:00
0
No meu controlador eu falo para renderizar uma lista de livros usando o JSON dessa forma:

render Book.list() as JSON


E na minha GSP ele imprime isto:


[
{"id":1,
"class":"Book",
"author":"Stephen King",
"title":"The Stand"},
{"id":2,
"class":"Book",
"author":"Stephen King",
"releaseDate":new Date(1194127343161),
"title":"The Shining"}
]


Mas eu queria ter o controle sobre a estrutura do JSON na minha GSP, tipo usar um g:each para iterar sobre os dados. Para fazer isto eu obrigatoriamente teria que usar javascript? o Grails tem alguma coisa pronta para iterar sobre JSON (e/ou XML)? Não estou conseguindo resolver isto, alguém tem algum exemplo?
Tags: Grails


0
Use o Jquery <!-- m --><a class="postlink" href="http://docs.jquery.com/Ajax/jQuery.getJSON">http://docs.jquery.com/Ajax/jQuery.getJSON</a><!-- m -->
02/02/2009 00:00


0
[quote=&quot;mschneider&quot;]Use o Jquery <!-- m --><a class="postlink" href="http://docs.jquery.com/Ajax/jQuery.getJSON">http://docs.jquery.com/Ajax/jQuery.getJSON</a><!-- m -->[/quote]

Legal, vou dar uma olhada. <!-- s;) --><img src="{SMILIES_PATH}/icon_wink.gif" alt=";)" title="Wink" /><!-- s;) -->

Por acaso tem alguma coisa parecida para o prototype?
02/02/2009 00:00


0
Fiz alguma coisa parecida com esta usando o prototype, mas não deu certo <!-- s:( --><img src="{SMILIES_PATH}/icon_sad.gif" alt=":(" title="Sad" /><!-- s:( -->


function atualiza()
&#123;

var baseUrl = &quot;$&#123;createLink(controller&#58;'controlador', action&#58;'getJSON')&#125;&quot;
new Ajax.Request(baseUrl, &#123;
method&#58; 'get',
asynchronous&#58; true,
onSuccess&#58; function(req) &#123;
update(req.responseText)
&#125;
&#125;)
&#125;

function update(json)
&#123;
var valor = eval( &quot;(&quot; + json + &quot;)&quot; );
alert(valor.atributo); // não imprime o valor
&#125;
03/02/2009 00:00


0
O seu retorno é uma coleção, o seu alert é para um elemento. Pesquisando no Google, encontrei este link <!-- m --><a class="postlink" href="http://blog.reindel.com/2007/10/02/parse-json-with-jquery-and-javascript/">http://blog.reindel.com/2007/10/02/pars ... avascript/</a><!-- m --> utilizando o JQuery, acredito que vai ser bastante útil para ti, que mostra inclusive como fazer uma iteração com a coleção de itens que você vai receber do seu controller.
04/02/2009 00:00


0
Já consequi resolver o problema, na verdade tinha esquecido que aquela variavel chamada valor era um array, dai era só iterar sobre ela assim:


for (i=0;i<listaValores.length;i++)
&#123;
alert(listaValores[i].atributo)
&#125;


Mas valeu pela força mschneider talvez isto me servirá em breve =)

....

O bom mesmo seria fazer uma taglib pra fazer este trabalho, não acham?
06/02/2009 00:00


0
Já que estavamos falando de JQuery, tenho uma dúvida.

Instalei o plugin do Grails para o JQuery, e pra eu usar algum plugin do o JQuery (tipo o jqGrid), necessariamente eu preciso de um sub-plugin do Grails pra JQuery?

Dei o comando grails list-jquery-plugins e só tem o form, facebox e o treeview. Tentei fazer da forma manual incluindo os arquivos js (<script src=...) mas não consegui, tem alguma forma de fazer isto?
16/02/2009 00:00


0
Se vc vai tratar dentro do gsp, pq vc nao usa o proprio objeto Book?
06/03/2009 00:00


0
[quote=&quot;mchiareli&quot;]Se vc vai tratar dentro do gsp, pq vc nao usa o proprio objeto Book?[/quote]

É que eu queria manipular um objeto que fica em memória e não no banco, e esse objeto fica dentro de um serviço, eu poderia colocar um método dentro da classe de domínio e chamar o serviço, mas me parece que ela não daria para acessar o serviço via dominio (sem contar que não ficaria legal).
09/03/2009 00:00


0
Pra quem quiser o código está ai, espero que ajude alguém. Ficou uma coisa bem manual, mas funcionou.


<script type=&quot;text/javascript&quot;>

atualizaIntimacoes()

function atualizaIntimacoes()
&#123;
var baseUrl = &quot;$&#123;createLink(controller&#58;'processo', action&#58;'getIntimacoesAsJSON')&#125;&quot;
new Ajax.Request(baseUrl, &#123;
method&#58; 'get',
asynchronous&#58; true,
onSuccess&#58; function(req) &#123;
update(req.responseText)
&#125;
&#125;)
&#125;

function update(json)
&#123;
var intimac = eval( &quot;(&quot; + json + &quot;)&quot; );

for (i=0;i<intimac.length;i++)
&#123;
processoId = intimac[i].processo
if (processoId == null)
processoId = &quot;&quot;

lista += &quot;<input type=\&quot;checkbox\&quot; name=\&quot;removeintimacao\&quot; value='&quot;+processoId+&quot;'/> <a href=\&quot;/projeto/intimacao/show?idprocesso=&quot;+processoId+&quot;\&quot;>&quot;+intimac[i].tipo+&quot;</a><br/>&quot;
&#125;

$('_intimacoes').update(lista)

&#125;
</script>
...
<div id=&quot;_intimacoes&quot;></div>



def getIntimacoesAsJSON = &#123;
render processoService.pegaIntimacoes() as JSON
&#125;
09/03/2009 00:00



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto