Troca de argumentos entre Javascript e Groovy
31/07/2015 11:13
0
Prezados membros,
Preciso que  o evento de onClick de alguns elementos das páginas gsp abasteçam alguns dois atributos de session, mas não sei como fazê-lo. Preciso deste help de vocês!
Vejam só:
Considere o atributo menu001 (criado por mim).: session.menu001
Criei a seguinte função javaScript - setMenu00x com dois argumentos, a saber p1 e p2:
<script type="text/javascript">
function setMenu00x(p1, p2) {
 if (p1 != null) {
${session.setAttribute(p1, p2)}
}
}
</script>

Neste caso, preciso passar os argumentos p1 e p2 para a função session.setAttribute  ==>  session.setAttribute (p1, p2)
Exemplo de código onde chamo o evento onClick:
<li class="">
<a href="#" class="dropdown-toggle" onclick="setMenu00x('menu001', 'Pessoas')" >
<i class="menu-icon fa fa-group"></i>
<span class="menu-text"> Pessoas </span>
<b class="arrow fa fa-angle-down"></b>
</a>?

Mensagem de erro recebida:
setAttribute: name parameter cannot be null
A título de teste, se substituirmos a funçã javaScrpt por:
?<script type="text/javascript">
function setMenu00x(p1, p2) {
 if (p1 != null) {
 ${session.setAttribute('menu001', 'Pessoa')}
}
}
</script>

Tudo ocorre perfeitamente. Parece estar havendo alguma incompatibilidade entre os argumentos do JavaScript e os parâmetros do método Groovy ===> setMenu00x(p1, p2)     X    ${session.setAttribute(p1, p2)}
Tentei substituir a evocação do código Groovy por uma string e utilizar o JavaScript exec, mas embora não tenha dado erro nada aconteceu...
<script type="text/javascript">
function setMenu00x(p1, p2) {
 if (p1 != null) {
var str1 = '"\$'
var str2 = "{session.setAttribute('"
var str3 = p1
var str4 = "','"
var str5 = p2
var str6= "'"
var str7 = ')}"'
var lsExp = str1.concat(str2, str3, str4, str5, str6, str7)
exec (lsExp)
}
}
</script>

  
O valor de lsExp, recuperado por uma função alert é: "\${session.setAttribute('menu001', 'Pessoa')"
Se eu fizer direto exec ("\${session.setAttribute('menu001', 'Pessoa')}")
Dá tudo certo...
Ou seja, os atributos não são reconhecidos.
Obrigado!
Tags: javascript;groovy;arguments;parameters;attributes;setAttribute: name parameter cannot be null


0
Eu geralmente utilizo assim:

<script type="javascript">
?var selecionado ="${pessoa ? pessoa : ''}"
</script>
31/07/2015 15:27


0
Olá Fernando, não consegui... porém não entendi muito bem a sintaxe proposta...

Como ficaria a chamada para carregar a variável de sessão:  ${session.setAttribute(p1, p2)}

Preciso de mais orientação.
31/07/2015 17:02


0
Agora entendi melhor, faz uma chamada ajax para o controlador passando alguns parâmetros


http://api.jquery.com/jquery.post/
31/07/2015 17:07


0
Prezado Fernando,

pelo que entendi, essa chamada Ajax sugerida serve para trazer dados do servidor para o HTTP.

A minha necessidade é levar dados do HTTP para o objeto session... 

Ainda estou sem ideia, obrigado!
02/08/2015 14:42


0
Você não vai conseguir executar código Groovy diretamente à partir de um javascript numa página por que ambos rodam em ambientes diferentes.
Quando você fez ${session.setAttribute('menu001', 'Pessoa')} funcionou por que o código session.setAttribute(...) foi chamado durante a renderização da página ainda no servidor.
Para fazer o que você quer, a solução já foi dada por alguem aqui: No javascript você dispara uma chamada AJAX passando o que quiser como parâmetros, e no servidor você lê tais parametros e faz o que quiser



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