【问题标题】:jsf multiple validatorsjsf 多个验证器
【发布时间】:2011-04-28 11:16:22
【问题描述】:

我需要知道如何为多个字段使用 m 多个验证器,例如姓名和电子邮件 ID,以及年龄和电话号码。我有一个线索,在 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 验证器中使用多个字段

【问题讨论】:

  • 您的代码似乎正确。 JSF 在不同的字段上接受多个验证器。您能否更准确地了解“不起作用”的事情?你有什么样的行为?
  • Retagged:添加了jsf和validation标签,去掉了“server”标签(因为quiestion与服务器无关)
  • 验证器函数没有被调用,我还在faces.config.xml中添加了类文件,但是函数没有被调用,输出中没有进行验证

标签: java validation jsf richfaces


【解决方案1】:

尝试在表单中写入&lt;h:messages /&gt; 标签。

如果 ID 有问题,它可以帮助找到错误,因为它会打印所有消息。

【讨论】:

    猜你喜欢
    • 2010-11-12
    • 1970-01-01
    • 2013-07-25
    • 2018-01-28
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多