Solved

Struts dynamic form validation

Posted on 2004-09-08
7
2,833 Views
Last Modified: 2008-02-01
Hi Experts,

I am new to struts. And I hope someone can guide me on the following:
I have a form which all the form fields are dynamic generated from database.
How can I perform validation for those dynamic field?

Thank you

0
Comment
Question by:totoron
  • 3
  • 3
7 Comments
 

Expert Comment

by:mylenereiners
ID: 12004483
Do you have to validate?
I mean, if the data are in the database they should be ok (or at least I hope).

But if you need it: you can turn on validation (on a page-by-page basis) in struts-config.xml.
And have a look at the Validator and DynaForms to perform the validation

Success,

Mylene
0
 

Author Comment

by:totoron
ID: 12005824
The data are not in the database yet. I have to verify the data entered are correct before I store to database.
However each field in the form are very dynamic according to the country selected.
Eg: User chooses United States,
The form for this User may have the following fields for their address:
-Apt
- City
-Postcode

Whereas user chooses Singapore, may have the following fields for their address:
- Block
- Street
- Unit number
- Postcode

I need to verify user enters the correct data.
Since all these fields are dynamic(retrieve from database), how do I validate those fields.
Can someone give an example?
Thanks
0
 
LVL 11

Accepted Solution

by:
sompol_kiatkamolchai earned 500 total points
ID: 12006470
if you use strust framework you can create validate() method in form bean which jsp container will call it automatically when the form is created as set to value.

you should start with creating form that contains all posible fields from every country like this

public class AddressFormBean {
  private String apt;
  private String city;
  private String postcode;
  private String block;
  private String street;
  private String unitNumber;
  private String postcode;

  public String getApt() {
    return this.apt;
  }
 
  public void setApt(String apt) {
    this.apt = apt;
  }
  ...
  ... // other fields accessor method or getter and setter
  ...
 
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
    {
        ActionErrors errors = new ActionErrors();

        if(getApp() == null || getApp().equals(""))
            errors.add("apt", new ActionError("error.AptErrorMessage"));
        if(getCity() == null || getCity().equals(""))
            errors.add("city", new ActionError("error.CityErrorMessage"));
        try
        {
            int  temp = Integer.parseInt(getPostcode());
        }
        catch (NumberFormatException e)
        {
            errors.add("postcode", new ActionError("error.PostcodeErrorMessage"));
        }
        ...
        .... //more validate other fields...
        ....
        return errors;
    }
}

when you submit form to action then struts frame work will look in struts-config.xml for type of
form bean to create. after create and call all setters method. it will call validate if there is errors
return from this method it will redirect to jsp file you specify.

for more detail
http://publib.boulder.ibm.com/infocenter/iadthelp/index.jsp?topic=/com.ibm.etools.struts.doc/html/tstruse0024.htm
http://struts.apache.org/
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:totoron
ID: 12012507
Thanks. I didn't list out all the possible fields.
I plan to use hashmap to keep all the fields that I have extracted from Database.
My code is as below.
However, I can't get my validation error message pop up. Is there anything that I missed out.
Please advise.


public class WarrantyRegForm extends ValidatorForm{
       
   public Map fields = new HashMap();
    public ArrayList vali = new ArrayList();
   
     public Object getField(String key)
    {    
        return fields.get(key);
     }
 
    public void setField(String key, Object field)
    {
            fields.put(key,field);
     }
 
       public ActionErrors validate( ActionMapping mapping, HttpServletRequest request ) {
        ActionErrors errors = new ActionErrors();
        HttpSession session=request.getSession();
        vali =(ArrayList)session.getAttribute(Constants.LOCALIZED_ADD);
     
        for(int i=0; i<vali.size(); i++){
            String key= (String)vali.get(i);
               if ( getField(key) == null || ((String) getField(key)).length() < 1 ) {
                System.out.println(getField(key)+"Print out null here?");
                errors.add("key",new ActionError("errors.add"));
            }  
           
        }
        System.out.println(errors);
        return errors;
           
}
     
}
0
 
LVL 11

Expert Comment

by:sompol_kiatkamolchai
ID: 12016384
http://struts.apache.org/userGuide/building_view.html#form_validation

If I have more time, I will help you more. Maybe tomorrow.
0
 

Author Comment

by:totoron
ID: 12023981
Ok. Thanks.
Is there any method which I don't have to explicitly list out all the properties to do the validation?
0
 
LVL 11

Expert Comment

by:sompol_kiatkamolchai
ID: 12024021
You must have property file that contain error message.
As you can see

errors.add("key",new ActionError("errors.add"));

the errors.add is one entry point in property file like this

errors.add=Tell the user what the error is.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
web service Rest Client creation 4 81
jersey maven project error 7 138
oracle fusion vs MQ 2 109
equalIsNot  challenge 43 134
Scenario: Your operations manager has discovered an anomaly in your security system. The business will start to suffer within 15 minutes if it is a major IT incident. What should she do? We have 6 recommendations for managing major incidents (https:…
With the rapid rise in mobile usage, mobile devices are here to stay and have become an integral part of doing business. Here are 9 great apps for your BYOD environment.
In this video I am going to show you how to back up and restore Office 365 mailboxes using CodeTwo Backup for Office 365. Learn more about the tool used in this video here: http://www.codetwo.com/backup-for-office-365/ (http://www.codetwo.com/ba…
Internet Business Fax to Email Made Easy - With  eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, f…

867 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now