JSF несколько валидаторов - PullRequest
1 голос
/ 21 октября 2010

Мне нужно знать, как использовать m нескольких валидаторов для нескольких полей, таких как имя и идентификатор электронной почты, а также возраст и номера телефонов.у меня есть подсказка, что в ajax я могу использовать несколько валидаторов для одной формы с разными полями, но в 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>  

проверка имени:

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); 


 } 

 } 

Проверка адреса электронной почты:

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,Example@abc.com"); 

   message.setDetail("Email is not valid,Example@abc.com"); 

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

   throw new ValidatorException(message); 


 } 

 } 


}

просьба дать идеальный ответна мой вопрос.

Если я использую одно поле в качестве E.mail, я получаю сообщение валидатора, если я использую два или более полей, таких как имя, номер телефона, я не получаю сообщения валидатора. Работает только одно поле, какиспользовать несколько полей в валидаторах jsf

1 Ответ

1 голос
/ 22 октября 2010

Попробуйте записать тег <h:messages /> в форму.

Если есть проблемы с идентификаторами, это может помочь найти ошибку, потому что она напечатает все сообщения.

...