Validador customizado - SEAM

Oi,
Gostaria de fazer o meu proprio validador, pesquisei varios exemplos, e tentei seguir este exemplo:

http://www.roseindia.net/jsf/validator.shtml

mas aparece um erro assim que chamo a página…

“Unknown validator id ‘checkUser’.”


<s:decorate id="nomeDecoration" template="layout/edit.xhtml"> <ui:define name="label">Utilizador</ui:define> <h:inputText id="nome" required="true" size="50" maxlength="50" value="#{tbNomesHome.instance.nome}"> <f:validator validatorId="checkUser"/> <a:support event="onblur" reRender="nomeDecoration"/> </h:inputText> </s:decorate>

<validator>
<validator-id>checkUser</validator-id>
<validator-class>pt.validatorAD</validator-class>
</validator>

Alguem sabe dizer qual o problema???

Posta a classe do seu validator


package pt.validatorAD;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;



public class testeValidador implements Validator {

	public void validate(FacesContext context, UIComponent component,
			Object value) throws ValidatorException {


try {
			boolean conservador = LDAPManager.Grupo("val1", "val2", "val3");
			if (conservador==true){
				System.out.println("true.................................................");
				FacesContext.getCurrentInstance().addMessage("erro", new FacesMessage("Conservador..tudo bem..."));
				
			}else{
				System.out.println("false.................................................");
				FacesContext.getCurrentInstance().addMessage("erro", new FacesMessage("Insira um utilizador do grupo"));
			}
			
		} catch (Exception e) {
			
			e.printStackTrace();
			
		}
			
		
	}

}

Para alem de ele não chegar a entrar nesta classe não sei como depois passar mensagens para a pagina xhtml… :S

Bom, eu nunca fiz um validator, mas vai um palpite.

Colocar o fullQualifiedName da classe em ao invés de apenas o pacote deve resolver :lol:

<validator-class>pt.validatorAD.testeValidador</validator-class> 

Abs

[quote=GraveDigger]Bom, eu nunca fiz um validator, mas vai um palpite.

Colocar o fullQualifiedName da classe em ao invés de apenas o pacote deve resolver :lol:

<validator-class>pt.validatorAD.testeValidador</validator-class> 

Abs[/quote]

Entretanto já experimentei como disse mas continua a dar o mesmo erro… nao consigo perceber porque… :S

Mais alguma sugestão? perciso mesmo de fazer esta validação… :S

alguem sabe outra maneira de validar um campo?

tenho uma classe com os metodos necessarios para validar, a retornar TRUE ou FALSE… alguem sabe como associar esta classe ao meu h:inputText ???

Obrigado…

consegui contornar a situação a fazer a validação na mesma sem registar no faces-config.xml…

ja agora deixo aki uma solução para quem tiver tambem com probelmas…

<s:decorate id="nomeDecoration" template="layout/edit.xhtml">
                <ui:define name="label">Utilizador</ui:define>
                <h:inputText id="nome" 
                       required="true"
                           size="50"
                      maxlength="50"
                          value="#{tabela.instance.nome}"
                          validator='#{tabela.validate}'>
                    <a:support event="onblur" reRender="nomeDecoration"/>
                </h:inputText>
                
            </s:decorate> 

na classe tabela.java inclui o meu metodo validate da seguinte maneira…

public void validate(FacesContext context, UIComponent component,
			Object value) throws ValidatorException {

		try {
			boolean conservador = LDAPManager.Grupo("valor2", "valor1", "valor");
			
			
			if (conservador==true){
				
				System.out.println("true.................................................");
//tudo ok				((UIInput) component).setValid(true);
				
				
			}else{
				System.out.println("false.................................................");
				
//erro de validaçao
				((UIInput) component).setValid(false);
				
				

				context.addMessage(component.getClientId(context),
						
				new FacesMessage("mensagem de erro..."));
				
				
			}
			
		} catch (Exception e) {
			
			e.printStackTrace();
			
		}
	}

não precisa de colocar mais nada… assim que o perder o focus da caixa de texto ele faz a validação e mostra a mensagem ou não dependente da validação =)

Obrigado na mesma pelas dicas!

:lol: :lol: