Eu tenho um xhtml que no action de um botão chama um método na minha classe do EJB. Esse método retorna true ou false, gostaria de saber como eu faço para pegar esse retorno do método que está sendo chamado de um action do botão para passar esse retorna para uma função javascript.
Primeira coisa, você precisa entender que o javascript deve ser acionado a partir de algum evento na página, seja ele o carregamento da mesma ou o clique do mouse, por exemplo.
Partindo disso, você terá que ler o elemento html cujo valor deve ter sido alterado pela execução do método do EJB. Você pode acessar esses elementos utilizando técnicas de DOM, por exemplo. Para isso, precisará saber como identificar o(s) elemento(s) desejado(s).
A w3schools.com é um ótimo lugar para pesquisar sobre javascript e dom.
De resto, é só seguir a linha de raciocínio que está usando.
V
Viciado
drsmachado:
Primeira coisa, você precisa entender que o javascript deve ser acionado a partir de algum evento na página, seja ele o carregamento da mesma ou o clique do mouse, por exemplo.
Partindo disso, você terá que ler o elemento html cujo valor deve ter sido alterado pela execução do método do EJB. Você pode acessar esses elementos utilizando técnicas de DOM, por exemplo. Para isso, precisará saber como identificar o(s) elemento(s) desejado(s).
A w3schools.com é um ótimo lugar para pesquisar sobre javascript e dom.
De resto, é só seguir a linha de raciocínio que está usando.
A sim, eu entendi. Mas com DOM eu tenho como esperar a execução do action e depois chamar uma função javascript?
V
Viciado
drsmachado:
Primeira coisa, você precisa entender que o javascript deve ser acionado a partir de algum evento na página, seja ele o carregamento da mesma ou o clique do mouse, por exemplo.
Partindo disso, você terá que ler o elemento html cujo valor deve ter sido alterado pela execução do método do EJB. Você pode acessar esses elementos utilizando técnicas de DOM, por exemplo. Para isso, precisará saber como identificar o(s) elemento(s) desejado(s).
A w3schools.com é um ótimo lugar para pesquisar sobre javascript e dom.
De resto, é só seguir a linha de raciocínio que está usando.
Eu fiz um teste:
<?xml version='1.0' encoding='UTF-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"><h:head><title>Login Web</title></h:head><scriptlanguage="javascript">functionteste(){alert(document.getElementById("botao"));}</script><h:body><h:formid="formLogin"><h1><h:outputTextid="bemVindo"value="Bem vindo(a) ao sistema."/></h1><h:panelGridid="gridLoginSenha"columns="2"><h:outputTextid="loginLabel"value="Login:"/><h:inputTextid="usuario"value="#{usuarioMB.usuario.nome}"required="true"requiredMessage="Campo obrigatório"maxlength="50"/><h:outputTextid="senhaLabel"value="Senha:"/><h:inputSecretid="senha"value="#{usuarioMB.usuario.senha}"required="true"requiredMessage="Campo obrigatório"maxlength="10"/></h:panelGrid><h:commandButtonid="botao"value="Entrar"action="#{usuarioMB.login()}"onclick="teste()"/></h:form></h:body></html>
Meu alert show null. Porque se existe o id?
drsmachado
Por que está errado.
O evento não é o onclick, ele é disparado no click do botão, logo, ele é disparado antes da execução do método.
O que você precisa fazer é condicionar a execução da função à existência do elemento, após o processamento do método.
V
Viciado
drsmachado:
Por que está errado.
O evento não é o onclick, ele é disparado no click do botão, logo, ele é disparado antes da execução do método.
O que você precisa fazer é condicionar a execução da função à existência do elemento, após o processamento do método.
Mas como eu vou chamar a função se o elemento não existir. Como vou chamar a função após o processamento do método?
drsmachado
Cara, javascript possui if, certo?
Você pode invocar a função após o carregamento da página (evento onload, do elemento body) e pode colocar o script após a criação do elemento. Então, põe esse cérebro para funcionar.
V
Viciado
drsmachado:
Cara, javascript possui if, certo?
Você pode invocar a função após o carregamento da página (evento onload, do elemento body) e pode colocar o script após a criação do elemento. Então, põe esse cérebro para funcionar.
Cara é exatamente isso que eu estou lhe falando, não está considerando a criação do elemento. Mesmo clicando no botão entrar o alert sempre exibi NULL.
<?xml version='1.0' encoding='UTF-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"><h:head><title>Login Web</title></h:head><h:bodyonload="teste()"><h:formid="formLogin"><h1><h:outputTextid="bemVindo"value="Bem vindo(a) ao sistema."/></h1><h:panelGridid="gridLoginSenha"columns="2"><h:outputTextid="loginLabel"value="Login:"/><h:inputTextid="usuario"value="#{usuarioMB.usuario.nome}"required="true"requiredMessage="Campo obrigatório"maxlength="50"/><h:outputTextid="senhaLabel"value="Senha:"/><h:inputSecretid="senha"value="#{usuarioMB.usuario.senha}"required="true"requiredMessage="Campo obrigatório"maxlength="10"/></h:panelGrid><h:commandButtonid="botao"value="Entrar"action="#{usuarioMB.login()}"/></h:form><scriptlanguage="javascript">functionteste(){if(document.getElementById('botao')!=null)alert('NOT NULL');elsealert('NULL');}</script></h:body></html>
drsmachado
Por que você ainda está fazendo errado.
Quem chama a function teste? Já parou para pensar que você pode inserir esse script em um elemento JSF, como um panelGrid, que possui um rendered e, só renderizar o conteúdo do mesmo caso o id não seja nulo?
Já criou um html puro, na mão, para testar se a forma como você está colocando é a forma mais correta?
A tarefa de programar consiste em pensar e codificar.