2010-10-21 74 views
1

我需要知道如何使用多个验证器来处理多个字段,例如姓名和电子邮件ID以及年龄和电话号码。我有一个线索,在阿贾克斯我可以使用多个validaors为一个窗体与不同的领域,但在JSF只有一个领域,如名称验证或电子邮件验证工作,如果我使用两个验证器为相同的形式它不工作,这里是我的代码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,[email protected]"); 

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

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

    throw new ValidatorException(message); 


} 

} 


} 

请为我的问题提供一些完美的答案。

如果我使用一个字段作为E.mail我是验证邮件,如果我使用两个或多个字段,如姓名,电话号码即时通讯没有得到验证message.only一个字段正在工作,如何在jsf中使用多个字段验证程序

+0

您的代码似乎正确。 JSF在单独的字段上接受多个验证器。你可以更精确地说“不行”吗?你有什么样的行为? – romaintaz 2010-10-21 07:49:04

+0

重新标记:添加了jsf和验证标记,删除了“服务器”标记(因为quiestion与服务器无关) – 2010-10-21 08:14:08

+0

验证器函数不是calld,我还在faces.config.xml中添加了类文件,但函数是没有校验输出中没有验证 – 2010-10-21 09:33:52

回答

1

尝试将一个<h:messages />标记写入窗体。

如果ID有问题,它可能有助于查找错误,因为它会打印所有消息。