Busca no Blog

segunda-feira, 24 de fevereiro de 2014

Chamada simples de função Java através do Javascript com Richfaces

Dúvidas em programação Java para Web? Formação Java Web.
Sabe aquela velha dúvida quando se programa para WEB com Java, eu tenho uma variável em Javacript que precisa mudar o valor de uma variável Java (controller ou algum similar) ou simplesmente eu preciso chamar uma função Java através do Javascript? Alguém já deu uma olhada naqueles códigos Javascripts  complicados usando Json, e que muitas vezes não funcionam no framework que usamos?
Recentemente me deparei com um problema do tipo, eu precisava pegar dados que apenas poderiam ser obtidos através de um Javascript  no navegador, mas esses dados precisariam ser atualizado em um objeto Java e tudo teria que ser feito ao carregar a tela, ou seja no onload.
Depois de muito procurar, e ver sugestões que não funcionaria muito bem para o meu caso e outras que eu chamaria de “gambiarras” como colocar inputs hidden no meu xhtml, acabei descobrindo uma maneira de fazer até simples com Richfaces (nada de variáveis ocultas, kk).
Acontece que Richfaces tem jsFunction, através dessa tag é criado uma função em Javascript que automaticamente faz uma chamada Ajax (ou seja, Javascript chama Java, podendo até esperar a resposta do Java, o jsFunction cria os JSON).
Como eu queria chamar a função ao carregar a página fiz da seguinte forma (mas pode se chamar através de um onclick, onblur, etc, vai da sua escolha ou necessidade):

Javascript:

window.onload = function()
{
         var x = ... // código java script
         funcaoNome(x);
 }

Fora da tag h:form (não sei se faz diferença a posição):
<a:form>
<a:jsFunction name="funcaoNome" action="#{nomeClasseJava(action,bean,controller).metodo}" reRender="formNomeForm">

<a:actionparam name="param1" assignTo="#{nomeClasseJava(action,bean,controller).nomeDaVariavelASerModificadaNoJava}">// param necessário se quiser mudar valor de variável Java

</a:jsFunction><
/a:form>

Dentro da classe Java:
public void metodo()
{  
      ...codigo metodo
}

Bem, essa foi a minha solução... O que acharam? Alguma dúvida? 
Qualquer coisa é só comentar.
Dúvidas em programação Java para Web? Formação Java Web. 

Nenhum comentário:

Postar um comentário