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: