..interceptar erros no JSF ... tem como?

…boa tarde a todos …

…existe alguma maneira de interceptar os erros de Validação/Conversão dentro do JSF ???

…tipo, se eu colocar um <h:messages> automaticamente os erros são dispostos neste componente, mas estou tentando bolar uma esquema com mensagens em um único local personalizado, para isso necessito interceptar todas as mensagens de erro lançadas pela aplicação (inclusive as de validação e de conversão), para as mensagens lançadas da minha aplicação é tranquilo, e só lançar uma chave no request e fazer um teste com <c:if> na minha JSP, mas e para os erros lançados pelos validadores e conversores da JSF ??? …tem algum a maneira de fazer algo como:

 <c:if test="${ERRRO_JSF ne '' }">
    //meu objeto <h:messagens> personalizado

 </c:if>

…grato qualquer ajuda !!! :roll:

Eai,

Da sim… eu ja fiz isso uma vez… crie um messageListener que extende PhaseListener e declare ele no faces-config. fica algo assim

<faces-config>
  <lifecycle>
    <phase-listener>
      com.mycompany.listeners.SomeListener
    </phase-listener>
  </lifecycle>
</faces-config>    
public class SomeListener implements PhaseListener {

  public PhaseId getPhaseId() { 
     return PhaseId.RENDER_RESPONSE; 
  } 

  public void beforePhase(PhaseEvent e) {  
     FacesContext fc = e.getFacesContext(); 
     
     Iterator i = fc.getClientIdsWithMessages();  
     while (i.hasNext()) { 
         //sua Logica
     }
  }

  public void afterPhase(PhaseEvent e) { 
  }

}      

Espero ter ajudado.

[]s
Ferry

…perfeito !!! …valeu demais !!! :smiley:

…sem abusar muito me responde mais uma coisa … tem como agrupar as regras de validação pra um determinado <h:commandButton especifico ???

…tipo, imagine que eu tenha um formulário com os campos e seus respectivos validadores (required, etc.) e tenha 2 botões , um INCLUIR e outro RETORNAR, que persistem as informações e retornam a uma outra página respectivamente, diante desse cenário as regras de validação são aplicadas a todo e qualquer SUBMIT realizado pela JSF (visto que todos acessam um MB, visto que utilizo navegação dinamica), existe alguma maneira de aplicar a validação nos campos SOMENTE quando o botão incluir for clicado ???

…mais uma vez obrigado !!!

Não entendi muito bem sua pergunta.

Você pode evitar a validação setando immediate = true no componente que disparar a action que vc nao quer que ocorra validação.
O problema é que quando immediate é true, a action é chamada antes que o jsf injete os valores do formulario no managed bean. Se vc precisar dos valores que seriam submetidos vc consegue pegar eles atraves da viewRoot.findComponent(“meuComponente”), parsear para UIInput e utilizar o getValue();

Ajudei?

[]s
Ferry

…ajudou muito, pra botão funciona que é uma beleza, tem alguma propriedade semelhante a essa para os componentes do tomahawk ??? …em especial para o <t:jscookMenu ???
…to te perguntando isso pelo seguinte fato, estou utilizando JSF+TILES com o suporte do tomahawk b[/b] , apanhei demais com uns esquemas de SESSION e REQUEST onde alguns componentes como dataTable e outros não renderizavam os objetos contidos em beans com escopo de REQUEST, fiz umas alterações (um tanto quanto lusitanas) e ta funcionando, dai agora tenho o cenário que descrevi anteriormente, vou tentar ser mais claro:

…minha página e composta por Header, MENU, BODY, e FOOTER, tudo montado pelo TILES, no decorer das requisições eu altero sempre o BODY, e em determinado momento tenho um formulario de inclusão contendo todos os campos com as respectivas validações (required, validator, etc.) e dois botões (retornar = “retorna pra página anterior” e incluir=“persiste as informações”), pois bem sem o atributo immediate="true" inserido no botão RETORNAR a página não funciona, visto que as validações vão acontecer se este não estiver setada, até ai blz, para o botão RETORNAR tudo resolvido, no entanto como minha página foi construida pelo TILES a mesma tambem possui MENU (<t:jscookMenu do tomahawk), e qualquer item neste MENU que for selecionado també vai ativar a validação dos campos, procurei a propriedades mais não tive muita sorte…

…Ferryman desde já peço desculpas por lhe importunar com dúvidas meio que banais, sou iniciante e to apanhando muuuiiiittto :lol: … valeu cara !!!

…grato qualquer ajuda !!!

Eai,

Magina cara, pergunta idióta é a pergunta que não é feita.
Então… eu não tenho como verificar aqui, mas no menuItem do tomahawk nao tem a propriedade immediate?

[]s

Ferry

…heheh oreiagem minha (pra variar) :lol: …tem sim, consegui resolver ontem mesmo, tava procurando a propriedade nos “filhos” e isso e setado no “pai” dai todos os menus descendentes ficam fora da validação … valeu demais … ai Ferry vez ou outra quando a coisa apertar aqui e o GOOGLE não resolver vou mandar duvidas deste nível, qualquer ajuda e muito bem vinda :smiley:

…valeu pela força !!!