domingo, 20 de novembro de 2011

JavaScript + JSF, será que dá certo? (parte 2)


Em um outro post sobre JSF + Javascript comentei como manipular os objetos no jsp via javascript, agora vou postar algo ainda mais útil que isso, ainda no quesito gambiarra necessária.
Imagine que você tem algumas variáveis de controle em seu código Java, mas precisa que essas variáveis sejam enviadas de alguma forma para o jsp para que você faça alguma ação via javascript, como por exemplo, efetuar uma validação no código Java e se tudo estiver certo continuar a execução, mas se algo estiver errado volta para a tela, exibe uma mensagem e pinta os campos de alguma cor destacando o que está errado. Nesse caso a ação de pintar os campos e até mesmo a mensagem, dependendo da sua aplicação, é uma ação delegada ao javascript.
Mas como fazer para que a minha variável de controle no Java seja enxergada no javascript?
Na minha época de estagiário, eu certamente faria algo do tipo:
Deixa a variável de controle no Bean, adiciona um campo “inputtext” oculto no jsp e faz esse campo receber o valor da variável de controle, via javascript eu mando um getElementById pegar o valor desse campo e começo a utilizar.
Maravilha, gambiarra melhor que essa fica difícil de fazer, nem da vontade de mexer mais no código depois disso, deixa lá para as gerações futuras saberem quem fez essa maravilha de código.
Uma coisa que eu costumo dizer é: Para que ter o trabalho de fazer algo que já fizeram, e provavelmente melhor do que você?
O Tomahalk já faz algo do tipo sem precisar ficar colocando campo oculto na tela, não precisa se preocupar mais com essa gambiarra, se preocupe com as outras.
O que iremos fazer é utilizar um comando do tomahalk que pega uma variável qualquer do seu bean e passa o seu valor para uma variável global em javascript (a variável é global mas funciona apenas no jsp em que ela foi declarada). Para utilizar essa “poderosíssima” ferramenta, precisaremos primeiro importar a taglib necessária no jsp, mas não se desespere, se você está utilizando JSF é bem provável que possua esse jar no meio de sua pasta lib.
Importe a seguinte taglib (eu estou chamando apenas de “T” para economizar as teclas digitadas):
<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>
Agora, em qualquer lugar de seu jsp, mas para ficar menos feio, próximo ao seu javascript, importe a variável que precisa utilizando o comando t:jsValueSet
<t:jsValueSet name="" value=""/>
Em NAME você precisa colocar o nome que essa variável terá no javascript, pode ser qualquer coisa, atésorveteDeChocolate, mas será muito mais agradável se colocar um nome que faça referência ao que ela representa.
Em VALUE você deve colocar a variável de seu bean.
Ex.: Digamos que eu tenha uma variável de controle em meu bean chamada controleMensagem, essa variável é booleana.
NOTA: Os nomes no Java e no javascript podem ser iguais, eu coloquei diferente para não confundir as coisas.
Feito isso, agora eu só preciso utilizar a variável no javascript:
if (exibeMensagem) {
alert("preencha direito o campo x!");
}
No exemplo acima eu estou utilizando minha variável dentro do IF, porque condiz com o exemplo que eu passei, mas você pode utilizar em qualquer outra situação dentro de qualquer javascript no jsp em que o jsValueSet foi declarado, a variável não precisa nem ser booleana, pode ser de qualquer tipo.
Espero que esse post ajude a eliminar muitas gambiarras em seu código!


0 comentários:

Postar um comentário

Alguma dúvida?

 

© 2009Java Erro | by TNB