views:

41

answers:

1

i need to know how to use m multiple validators for multiple fields like name and email id,and age and phone numbers. i have a clue that in ajax i can use multiple validaors for one form with different fields, but in jsf only one field like name validator or email validator is working, if i use two validators for the same form its not working and here is my code

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>  

name validator:

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 validator:

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 provide some perfect answer for my question.

If i use one field as E.mail i am geeting validator message, if i use two or more fields like name, phone number i m not getting validator messages.only one field is working,how to use multiple fields in jsf validators

A: 

Try to write a Tag into the Form.

If there are problems with the IDs, it could help to find the error, because it will print all messages.

ckuetbach