Validador com anotações no JSF 2.0 (Resolvido)

1 resposta
F

Ai galera, eu criei um validador no JSF 1.2 que eu usava(com as configurações no faces-confog.xml), agora to tentando usa-lo no JSF 2.0 com anotações, mas não estou conseguindo, ele fala que nao encontrou o validador

package devmedia.app6;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

@FacesValidator("devmedia.app6.MyCustomValidator")
public class MyCustomValidator implements Validator{

    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        if ("fabio".equalsIgnoreCase(value.toString()))
        {
            System.out.println("Very good, The name is"+value+" the component is"+component+" / "+context);
            FacesMessage msg = new FacesMessage();
            msg.setSeverity(FacesMessage.SEVERITY_FATAL);
            msg.setSummary("Hey, Fabio is not allowed");
            throw new ValidatorException(msg);
            
            
        }
        try
        {
            Integer.parseInt(value.toString());
        }
        catch(Exception erro)
        {
            FacesMessage msg = new FacesMessage();
            msg.setSeverity(FacesMessage.SEVERITY_FATAL);
            msg.setSummary("Hey, this is not a number");
            throw new ValidatorException(msg);
        }

        Pattern mask = Pattern.compile("[0-6]{2}");        
        Matcher matcher = mask.matcher(value.toString());        
        if (!matcher.matches())
        {
            FacesMessage msg = new FacesMessage();
            msg.setSeverity(FacesMessage.SEVERITY_FATAL);
            msg.setSummary("Hey, invalid number");
            throw new ValidatorException(msg);
        }
    }

}

alguém sabe me dizer o que está faltando, pois quando ele estava mapeado no face-config.xml ele funcionava normalmente

ai esta a pagina xhtml que exibe ele

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
<h:head><title>JSF 2.0: Blank Starting-Point Project</title>
</h:head>
<h:body>
<div align="center">
<h1>Welcome 3</h1>


            
        <f:view>
            <h:outputText value="My Custom Validator"/>
            <h:messages/>
            <h:form>
                <h:inputText required="true" value="#{myNewManagedBean.name}" size="30" >
                    <f:validator validatorId="devmedia.app6.MyCustomValidator" />
                </h:inputText>
                <br/>
                <h:commandButton action="welcomeJSF6" value="Refresh"/>
            </h:form>
        </f:view>
            
</div></h:body></html>

1 Resposta

F

como ninguém aqui conseguiu me ajudar, eu venho aqui pra falar que consegui solucionar o meu problema(ja que sempre me ajudaram, agora eu vou contribuir) e compartilhar com vcs a minha solução, o codigo abaixo estava certo:

package devmedia.app6;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

@FacesValidator("devmedia.app6.MyCustomValidator")
public class MyCustomValidator implements Validator{

    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        if ("fabio".equalsIgnoreCase(value.toString()))
        {
            System.out.println("Very good, The name is"+value+" the component is"+component+" / "+context);
            FacesMessage msg = new FacesMessage();
            msg.setSeverity(FacesMessage.SEVERITY_FATAL);
            msg.setSummary("Hey, Fabio is not allowed");
            throw new ValidatorException(msg);
            
            
        }
        try
        {
            Integer.parseInt(value.toString());
        }
        catch(Exception erro)
        {
            FacesMessage msg = new FacesMessage();
            msg.setSeverity(FacesMessage.SEVERITY_FATAL);
            msg.setSummary("Hey, this is not a number");
            throw new ValidatorException(msg);
        }

        Pattern mask = Pattern.compile("[0-6]{2}");        
        Matcher matcher = mask.matcher(value.toString());        
        if (!matcher.matches())
        {
            FacesMessage msg = new FacesMessage();
            msg.setSeverity(FacesMessage.SEVERITY_FATAL);
            msg.setSummary("Hey, invalid number");
            throw new ValidatorException(msg);
        }
    }

}

o que faltou foi na hora de exibir, antes o codigo estava assim

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
<h:head><title>JSF 2.0: Blank Starting-Point Project</title>
</h:head>
<h:body>
<div align="center">
<h1>Welcome 3</h1>


            
        <f:view>
            <h:outputText value="My Custom Validator"/>
            <h:messages/>
            <h:form>
                <h:inputText required="true" value="#{myNewManagedBean.name}" size="30" >
                    <f:validator validatorId="MyCustomValidator" />
                </h:inputText>
                <br/>
                <h:commandButton action="welcomeJSF6" value="Refresh"/>
            </h:form>
        </f:view>
            
</div></h:body></html>

e o correto agora pra funcionar é assim

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
<h:head><title>JSF 2.0: Blank Starting-Point Project</title>
</h:head>
<h:body>
<div align="center">
<h1>Welcome 3</h1>


            
        <f:view>
            <h:outputText value="My Custom Validator"/>
            <h:messages/>
            <h:form>
                <h:inputText required="true" value="#{myNewManagedBean.name}" size="30" >
                    <f:validator validatorId="devmedia.app6.MyCustomValidator" />
                </h:inputText>
                <br/>
                <h:commandButton action="welcomeJSF6" value="Refresh"/>
            </h:form>
        </f:view>
            
</div></h:body></html>

a unica diferença mesmo é que validatorId deve ter o caminho completo da classe java

bom isso é usado no JSF 2.0 apenas para não ter que configurar o validador no faces.config.xml

t+

Criado 4 de fevereiro de 2011
Ultima resposta 7 de fev. de 2011
Respostas 1
Participantes 1