2010-10-21 6 views
1

J'ai besoin de savoir comment utiliser m validateurs multiples pour plusieurs champs comme le nom et l'adresse e-mail, et l'âge et les numéros de téléphone. J'ai un indice que dans ajax je peux utiliser plusieurs validaeurs pour un formulaire avec des champs différents, mais dans jsf seulement un champ comme validateur de nom ou email fonctionne, si j'utilise deux validateurs pour la même forme son ne fonctionne pas et voici mon CodePlusieurs validateurs jsf

package com.dnb; 

import java.util.Date; 

import javax.faces.component.UIComponent; 

public class UserBean 
{ 
private String username; 

public String getUsername() 
{ 
    return username; 
} 

public void setUserName(String UserName) { 
    this.username = UserName; 
} 
private String emailid; 

public String getEmailId() 
{ 
    return emailid; 
} 

public void setEmailId(String EmailId) { 
    this.emailid = EmailId; 
} 
private int age; 



private Object city; 

public String getage() 
{ 
    return ""; 
} 

public void setAge(int Age) { 
    this.age = age; 
} 

public String getcity() 
{ 
    return ""; 
} 

public void setcity(int City) { 
    this.city = city; 
} 
public void success() { 
     setProgressString(getProgressString() + "(Strored successfully)"); 
    } 

    private void setProgressString(String string) { 
    // TODO Auto-generated method stub 

} 

public String getProgressString() { 
     return getProgressString(); 
    } 
    private boolean buttonRendered = true; 
    private boolean enabled=false; 
    private Long startTime; 



    public String startProcess() { 
     setEnabled(true); 
     setButtonRendered(false); 
     setStartTime(new Date().getTime()); 
     return null; 
    } 

    public Long getCurrentValue(){ 
     if (isEnabled()){ 
      Long current = (new Date().getTime() - startTime)/1000; 
      if (current>100){ 
       setButtonRendered(true); 
      }else if (current.equals(0)){ 
       return new Long(1); 
      } 
      return (new Date().getTime() - startTime)/1000; 
     } if (startTime == null) { 
      return Long.valueOf(-1); 
     } 
     else 
      return Long.valueOf(101); 
    } 

    public boolean isEnabled() { 
     return enabled; 
    } 

    public void setEnabled(boolean enabled) { 
     this.enabled = enabled; 
    } 

    public Long getStartTime() { 
     return startTime; 
    } 

    public void setStartTime(Long startTime) { 
     this.startTime = startTime; 
    } 

    public boolean isButtonRendered() { 
     return buttonRendered; 
    } 

    public void setButtonRendered(boolean buttonRendered) { 
     this.buttonRendered = buttonRendered; 
    } 


} 

JSF:

<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%> 
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%> 
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> 
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> 
<html> 

    <body>  
    <f:view> 
    <h:form id="ajaxValidatorForm"> 
     <rich:panel> 
      <f:facet name="header"> 
       <h:outputText value="User Info:" /> 
      </f:facet> 
      <h:panelGrid columns="4"> 


    <h:outputText value="Name:" /> 
       <h:inputText value="#{userBean.username}" id="username" required="true" > 
       <f:validator validatorId="nameValidator" />        
      <h:message for="username"></h:message> 
       </h:inputText> 


       <h:outputText value="Email:" /> 
       <h:inputText value="#{userBean.emailId}" id="emailid" required="true" > 
       <f:validator validatorId="nameValidator" />        

    <h:message for="emailid"></h:message> 

     </h:inputText>  



      </h:panelGrid> 
     </rich:panel> 
    </h:form> 


    </f:view> 

    </body> 
    </html> 

nom validateur:

package com.dnb; 

import javax.faces.application.FacesMessage; 


public class NameValidator implements Validator 
{ 

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

    String name = (String) value; 

    if(!name.contains("123")) 
    { 

    FacesMessage message = new FacesMessage(); 

    message.setSeverity(FacesMessage.SEVERITY_ERROR); 

    message.setSummary("Name must be 3 to 8 letters"); 

    message.setDetail("Name must be 3 to 8 letters"); 

    context.addMessage("userForm:Name", message); 

    throw new ValidatorException(message); 


} 

} 

Email validateur:

package com.dnb; 

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 EmailValidator implements Validator 
{ 

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

    String email = (String) value; 

    if(!email.contains("@")) 
    { 

    FacesMessage message = new FacesMessage(); 

    message.setSeverity(FacesMessage.SEVERITY_ERROR); 

    message.setSummary("Email is not valid,[email protected]"); 

    message.setDetail("Email is not valid,[email protected]"); 

    context.addMessage("userForm:Email", message); 

    throw new ValidatorException(message); 


} 

} 


} 

pls fournissent une réponse parfaite à ma question. Si j'utilise un champ comme E.mail je suis le message de validation de geeting, si j'utilise deux champs ou plus comme le nom, le numéro de téléphone ne reçoit pas les messages du validateur.un seul champ fonctionne, comment utiliser plusieurs champs dans jsf validators

+0

Votre code semble correct. JSF accepte plusieurs validateurs sur des champs distincts. Pourriez-vous être plus précis concernant la chose «ne fonctionne pas»? Quel genre de comportement avez-vous? – romaintaz

+0

Retagged: ajouté jsf et tags de validation, enlevé le "serveur" tag (comme la quiestion n'a rien à voir avec le serveur) –

+0

la fonction de validation n'est pas appelée, j'ai également ajouté des fichiers de classe dans faces.config.xml, mais la fonction est pas appelé il n'y a pas de validation a été faite en sortie –

Répondre

1

Essayez d'écrire une balise <h:messages /> dans le formulaire.

S'il y a des problèmes avec les ID, cela peut aider à trouver l'erreur, car tous les messages seront imprimés.

Questions connexes