Diferenças entre FacesContext e ValidatorException

3 respostas
iuoyo

Oii gente…

Gostaria de tirar uma dúvida relativamente simples.

Estou trabalhando com JSF + Richfaces e vejo muitos tutoriais e fóruns que utilizam maneiras diferentes de validar tanto implementando a interface validator ou um métodos com os mesmos parâmetros no manangedBean.

Gostaria de saber qual é as diferenças e qual a melhor prática se se utilizar os validadores nesses 2 exemplos.

1-Utilizando ValidatorException

void validate(FacesContext context, UIComponent componente,Object value) throws ValidatorException {
    String s = (String) value;
    if(s.equals("")) {
         FacesMessage msg = new FacesMessage("Campo em Branco...");
         throw new ValidatorException(msg);
    }

}

2-Utilizando o FacesContext

void validate(FacesContext context, UIComponent componente,Object value) throws ValidatorException {
    String s = (String) value;
    if(s.equals("")) {
         FacesMessage msg = new FacesMessage("Campo em Branco...");
         fc.addMessage(componente.getClienteId(), msg);
    }

}

Nos exemplos acima eu consigo fazer ele funcionar normal, mas não sei qual é a melhor prática. Também gostaria de saber se tem como escolher o message que vai aparecer, eu geralmente utilizo h:message e tem que defini-lo no atributo “for” pra quem ele é, eu uso muito o facesContext para validar dentro do ManagedBean e exibir o erro, mas não consigo redirecionar pra algum h:message, somente consigo utilizar com h:messages;

Obrigado pela atenção.

Rodrigo Torres Leme

3 Respostas

altitdb

Não tenho tanta experiencia, mas…

Creio eu que as duas formas sejam validas e corretas, acho que não tem uma melhor ou pior, e sim mais especifica para sua regra de negócio.

FacesMessage msg = new FacesMessage("Campo em Branco...");  
fc.addMessage("form:iddocomponente", msg);

Eu implemento dessa forma, então quando acontece algum erro o FacesMessage add ao componente que eu desejo.

<h:form id="form" >
<h:inputText id="iddocomponente" />
<h:message for="iddocomponente" />
</form>

xD~~

iuoyo

Valeu pela resposta.

Funciono aqui, eu só não chamava o form antes. AUSHAUSH

VALEU!

altitdb

Que bom que funcionou, se você utilizar o prependId=“false” no form não precisa colocar form:idcomponente.

PS: acho que é prependId, dá uma lida nele é interessante em alguns pontos.

Criado 28 de dezembro de 2010
Ultima resposta 29 de dez. de 2010
Respostas 3
Participantes 2