Disable h:commandButton como resultado de um rich:message

8 respostas
Andre_Fonseca

oi,

eu tenho um h:panelGrid com alguns campos, estou validando eles usando rich:message algo assim

<h:panelGrid...>
  <rich:message id="" for="">

   </rich>

  <h:commandButton action=#{meuBean.metodo}"  disable="??"/>

</h:panelGrid..>

é possivel eu setar um disable no commandButton para ele chamar o metodo do meu Bean apenas qdo a validacao do rich:message passar por todos os campos??

pensei em fazer isso usando javascript colocando em um onclick, mas não sei se seria a melhor opção..

alguém tem uma sugestão??

tks

8 Respostas

Requena

cara vc pode por uma expressão dentro do disable… tipow…

<h:commandButton action="#{meuBean.metodo}"  disable="#{meuBean.validaBotao}"/>

ai tipo… enquanto o getValidaBotao retornar true o botão vai estar disable… ai vc controla tudo dentro do bean navegacao…

isso resolve?

Andre_Fonseca

Requena:
cara vc pode por uma expressão dentro do disable… tipow…

<h:commandButton action="#{meuBean.metodo}"  disable="#{meuBean.validaBotao}"/>

ai tipo… enquanto o getValidaBotao retornar true o botão vai estar disable… ai vc controla tudo dentro do bean navegacao…

isso resolve?

oi,

entendi, mas como eu faço com o valor deo validaBotao no Bean? este valor depende do rich:message, ou seja, enquanto ele retornar false o validaBotao deve ser false tb

abs

Requena

não entendi o q vc disse cara…
mas tipo…
no rich coloca um a4j:support mais ou menos assim

<h:panelGrid...>  
      <rich:message id="" for=""> 
          <a4j:support event="onfocuslost(algo assim)" actionListener="#{meuBean.metodoValidaBotao}"
            reRender="button">
      
       </rich>  
      
      <h:commandButton id="button" action="#{meuBean.metodo}"  disable="#{meuBean.validaBotao}"/>  
      
    </h:panelGrid..>

nesse caso no metodoValidaBotao vc pega o valor do rich e verifica se é o que quer se for vc seta o boolean de retorno do validaBotao para false e da um reRender no button, quando ele invocar novamente o get do validaBotao vai estar false o e button ficara clicavel…

o event do a4j eu nao lembro de cabeça qual tem disponivel da um ctrl+espaço q ele mostra todos os eventos do rich…
resumindo… vc pode pegar todos os eventos de um componente acima do a4j support no nosso caso todos os eventos possiveis do rich:message.

serve?

Andre_Fonseca

oi,

entao, eu preciso que o action do commandLink seja executado apenas quando a validacao dos campos passou, no caso pegando o evento dos rich:message acho que já é o suficiente

vou testar a sua sugestão aqui e depois retorno

vlw

Requena

Seguinte,

essa forma que eu ti passei é a mais porca para a ocasião…
no seu caso… acho que seria interessante lançar um f:validator

da uma olhada nesse site que da para entender como funciona…

http://www.ibm.com/developerworks/java/library/j-jsf3/index.html

resumao!!

com o f:validator o jsf antes de dar o action do botao testa todos os validators,
caso nao retorne nenhum erro e todos os campos forem validados com sucesso,
o action é acionado… caso contrario ele retorna uma msg de erro para o usuario…

acho que é isso que vc precisa…
da uma olhada… tem alguns prontos ja na lib… talvez ja resolva o seu problema…

alias

Requena:
Seguinte,

essa forma que eu ti passei é a mais porca para a ocasião…
no seu caso… acho que seria interessante lançar um f:validator

da uma olhada nesse site que da para entender como funciona…

http://www.ibm.com/developerworks/java/library/j-jsf3/index.html

resumao!!

com o f:validator o jsf antes de dar o action do botao testa todos os validators,
caso nao retorne nenhum erro e todos os campos forem validados com sucesso,
o action é acionado… caso contrario ele retorna uma msg de erro para o usuario…

acho que é isso que vc precisa…
da uma olhada… tem alguns prontos ja na lib… talvez ja resolva o seu problema…

Lembrando que pra isso acontecer seus campos devem estar dentro de um form, que uma vez submetido, o ciclo de vida do JSF vai fazer as validações necessárias ANTES de chamar o action do seu commandLink.

Requena

alias:
Requena:
Seguinte,

essa forma que eu ti passei é a mais porca para a ocasião…
no seu caso… acho que seria interessante lançar um f:validator

da uma olhada nesse site que da para entender como funciona…

http://www.ibm.com/developerworks/java/library/j-jsf3/index.html

resumao!!

com o f:validator o jsf antes de dar o action do botao testa todos os validators,
caso nao retorne nenhum erro e todos os campos forem validados com sucesso,
o action é acionado… caso contrario ele retorna uma msg de erro para o usuario…

acho que é isso que vc precisa…
da uma olhada… tem alguns prontos ja na lib… talvez ja resolva o seu problema…

Lembrando que pra isso acontecer seus campos devem estar dentro de um form, que uma vez submetido, o ciclo de vida do JSF vai fazer as validações necessárias ANTES de chamar o action do seu commandLink.

nem achei necessário citar a necessidade de um form pos sem isso nada da submit. é igual lembrar que tem de por o public class na classe java… :D… hehehe…mas ta certo é isso ae…

Andre_Fonseca

opa,

sim, os meus campos estão dentro de um form, vou dar uma olhada no f:validator

vlw

Criado 22 de fevereiro de 2010
Ultima resposta 23 de fev. de 2010
Respostas 8
Participantes 3