Advertisement :
   Log In    OR    Register  
  Topics :  
RMI Example

Home >>> Struts Struts 2 Example Tutorial >>> Struts2 Validation Expression >>> Struts2 REGEX Example
Struts Tutorials:
Struts2 Tag CheckBoxList
, Checkbox, Iterator, IF
Struts2 Tag Library Example Struts2 Tiles Example Struts2 Tiles I18N Example Struts2 Questions Struts Tiles I18N Example Struts Eclipse MVC Struts2 Tags Struts2 Example and Tutorial Struts MVC Struts2 Validation
Hibernate Tutorials: Hibernate Case Study Class Hierarchy Persist Example Using Hibernate Interceptor Hibernate Questions with Answer Hibernate Many-to-Many Mapping Example Hibernate one-to-many Mapping Example Hibernate and ORM tools Spring Hibernate Example Hibernate SessionFactory Example Hibernate Mapping Class Hierarchy Hibernate Questions Hibernate SessionFactory Questions Spring Hibernate Example: Spring Hibernate Case Study

Written By : ISHTEK
Title :
Struts2
Description : Tags such as IF Iterator Tags
More...


Written By : guddu
Title :
Struts Eclipse MVC
Description : Step by step demonstration
More...


Written By : Girish
Title :
Struts Tiles I18N Example
Description : Code with Sample Action
More...


Written By : ISHTEK
Title :
Struts2 questions
Description : open for discussion
More...


Written By : ISHTEK
Title :
Struts2 Tiles Example
Description : with Code and article
More...


Written By : ISHTEK
Title :
Struts2 Tiles I18N Example
Description : with code explained article
More...


Written By : Amit
Title :
Struts2 Tag Library Example
Description : Tutorial
More...

Tags/Keywords : Struts, Struts2 Tutorial, Struts 2 Example, Struts2
Author : Amit
Date (Year/Month/Date): 2009-11-21 Struts2 Validation exmaple with regex expressions

Please be informed that NONE of the design/code from this
page is claiming to be some sort of best practices and we DO NOT expect
any of our visitor/reader of this page to assume this as some sort of
best practice for any context and should not be using this 
as it is without appropriate evaluation to their, so to say, 
specific programming context.

This page intends only to provide bit and piece of known ways  for
doing some sort of example and may not be fit for any other purpose.

In this writing I shall be showing an example to demonstrate how to use validator for regex expressions using Struts 2 Framework and I am going to use an already used example from this site, this example has a Bean as ExamplePOJOAction Java class file. With validation for expression, I am going to use REGEX expression along with the in-built validator from Struts 2 and supporting JAR files. The ExamplePOJOAction has a private variable of type MyBean, and named as "myBean", this is MyBean with a stdClass of type String. So the field name that is to be used in the ..-validation.xml configuration file is "myBean.stdClass". In this example we have a validation XML file as <bean_name>-validation XML file. As the Bean Action name is "ExamplePOJOAction", so the validation XML configuration file is "ExamplePOJOAction-validation.xml", as shown below: ExamplePOJOAction-validation.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE validators PUBLIC
        "-//OpenSymphony Group//XWork Validator 1.0.3//EN"
        "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
  <field name="myBean.stdClass">
    <field-validator type="regex">
      <param name="expression">^[IVX]*$</param>
      <message>Please enter value using I, V, X only</message>      
    </field-validator>
  </field>
</validators>
Here in this example we are concerned about two Java class files, one is the POJO Action class, and another one is a POJO Bean class. In this example Action class is not really a POJO, as it extends ActionSupport from xwork-2.1.2.jar. One question came to my thought is why is this Action class extending ActionSupport, answer is that without this Base ActionSupport class our Action class won't be able to participate in validation that is defined in validation XML file. Here is the Action class for this example: ExamplePOJOAction.java
package sample;
/**
 * This code is provided "AS IS" without any guaranty
 * Use of this code only for educational and learning
 * purpose only.
 * Author: Amit
 * Contact : http://www.interview-questions-tips-forum.net
 * Date: 16-Feb-2009
 */
import java.util.Map;
import com.opensymphony.xwork2.ActionSupport;

/**
 * This is the Action POJO class
 */
public class ExamplePOJOAction extends ActionSupport {
    private MyBean myBean;
    public String preview() throws Exception {
        return "preview";
    }
    public void setMyBean(MyBean argMyBean) {
        myBean = argMyBean;
    }
    public MyBean getMyBean() {
        return myBean;
    }
}
Advertisement :
And the supporting value object MyBean is shown as below: MyBean.java
package sample;
import java.util.List;
import java.util.ArrayList;

public class MyBean
{
    private String userName;
    private String roll;
    private String email;
    private String section;
    private String stdClass;
    private List subscriptionOptions;
    private List consentOptions;
    private boolean newsLetterOption;

    public String getUserName() {
        return this.userName;
    }
    public void setUserName(String argUserName) {
        userName = argUserName;
    }
    public String getRoll() {
        return this.roll;
    }
    public void setRoll(String argRoll) {
        roll = argRoll;
    }
    public String getEmail() {
        return this.email;
    }
    public void setEmail(String argEmail) {
        email = argEmail;
    }
    public String getSection() {
        return this.section;
    }
    public void setSection(String argSection) {
        section = argSection;
    }
    public String getStdClass() {
        return this.stdClass;
    }
    public void setStdClass(String argStdClass) {
        stdClass = argStdClass;
    }
    public List getSubscriptionOptions() {
        return subscriptionOptions;
    }
    public void setSubscriptionOptions(List argSubscriptionOptions) {
        subscriptionOptions = argSubscriptionOptions;
    }
    public void setNewsLetterOption(boolean argNewsLetterOption) {
        newsLetterOption = argNewsLetterOption;
    }
    public boolean getNewsLetterOption() {
        return newsLetterOption;
    }
    public void setConsentOptions(List argConsentOptions) {
        consentOptions = argConsentOptions;
    }
    public List getConsentOptions() {
        return consentOptions;
    }
}
In order to understand how these beans are defined in the struts.xml configuration file, as shown below: struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="hibernate-example" namespace="/sample"
                 extends="struts-default">
        <action name="example" class="sample.ExamplePOJOAction" 
                               method="preview">
                <result name="preview">/preview.jsp</result>
                <result name="input">/index.jsp</result>
        </action>
    </package>
</struts>
So we have two JSPs for showing UI for this example. index.jsp file is the main JSP file that is called when browser is requesting for the default main screen, and on click of the submit button, validation for the action ExamplePOJOAction will be invoked. Appropriate error message will be shown on screen with the message from the validation XML file. Once the correct value for the STD/class text field is entered, for this example it is any word using I, V or X letters only, the preview screen will be called. Some of the other files require to run this example as follows:
Advertisement :
index.jsp
<%@ taglib uri="/struts-tags" prefix="struts2"%>
<html>
<head>
<link rel="stylesheet" type="text/css" href="sample.css" />
</head>
<body>
<struts2:actionerror cssClass="ss"/>
<struts2:bean id="so" name="sample.SubscriptionOptions"/>
<struts2:bean id="consentOption" name="sample.ConsentOptions"/>
<struts2:form method="post" action="example" namespace="/sample">
<table>
<tr><td><struts2:textfield key="myBean.userName" label="Name "/></td></tr>
<tr><struts2:textfield key="myBean.roll" label="Roll "/></td></tr>
<tr><struts2:textfield key="myBean.email" label="Email "/></td></tr>
<tr><td><struts2:textfield key="myBean.section" label="Section "/></td></tr>
<tr><struts2:textfield key="myBean.stdClass" label="Std/Class "/></td></tr>
<struts2:checkbox key="myBean.newsLetterOption" label="Subscription for News Letters "/>
<struts2:checkboxlist label="Other Subscription Options " key="myBean.subscriptionOptions" list="so" labelSeparator=":"/>
<struts2:radio label="You opinion " key="myBean.consentOptions" list="consentOption" labelSeparator=":"/>
<tr><td colspan="2"><struts2:submit value="Register"/></td></tr>
</table>
</struts2:form>
</body>
</html>
preview.jsp
<%@ taglib uri="/struts-tags" prefix="struts2"%>
<html>
<head></head>
<body>
<h2>Preview Page</h2>
<table>
<tr><td>
<b><font color="green">Name : </font>
</td><td><struts2:property value="myBean.userName"/></td></tr>
<tr><td><b><font color="green">Roll No. : </font></b></td><td>
<struts2:property value="myBean.roll"/></td></tr>
<tr><td><b><font color="green">Email : </font></b></td><td>
<struts2:property value="myBean.email"/></td></tr>
<tr><td><b><font color="green">Section : </font>
</b></td><td><struts2:property value="myBean.section"/></td></tr>
<tr><td><b><font color="green">Std/Class : </font>
</b></td><td><struts2:property value="myBean.stdClass"/></td></tr>
<tr><td>
<b><font color="green">New Letter Subscription :</font></b></td><td>
<struts2:if test="myBean.newsLetterOption">
Yes
</struts2:if>
<struts2:else>
No
</struts2:else>
</td></tr>
<tr><td valign="top"><b><font color="green">Other Subscription Options:</font></b></td><td>
<struts2:iterator id="a" value="myBean.subscriptionOptions">
<struts2:property value="a"/>
<br>
</struts2:iterator>
</td></tr>

<tr><td valign="top"><b><font color="green">User consent Option selected :</font></b></td><td>
<struts2:iterator id="b" value="myBean.consentOptions">
<struts2:property value="b"/>
<br>
</struts2:iterator>
</td></tr>

</table>
</body>
</html>
Some of the user defined values for showing subscription options and consent options on screen are SubscriptionOptions.java
package sample;
import java.util.ArrayList;

public class SubscriptionOptions extends ArrayList
{
        public SubscriptionOptions() {
          super();
          add("Technical Support");
          add("Business Support");
          add("HR Support");
          add("Help Desk Emails");
        }
}
ConsentOptions.java
package sample;
import java.util.ArrayList;

public class ConsentOptions extends ArrayList
{
	public ConsentOptions() {
          super();
          add("Agree");
          add("Disagree");
	}
}
And the Web application descriptor XML file for this example is: web.xml
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
    <display-name>Struts Blank</display-name>
  <filter>
  <filter-name>sample-filter</filter-name>
  <filter-class> 
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  </filter-class>
  </filter>
  <filter-mapping>
    <filter-name>sample-filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
List of JAR file with version those are used in this example as follows:
  • struts2-core-2.1.6.jar
  • xwork-2.1.2.jar
  • ognl-2.6.11.jar
  • freemarker-2.3.13.jar
  • commons-logging-1.1.jar
  • commons-io-1.3.2.jar
  • commons-fileupload-1.2.1.jar
  • Eclise 3.2 is used as IDE and Apache Jakarta Tomcat 5.5.9 as web server.
    
    
    	

    Commented By ->
    Steve
    Hi Amit,
    
    Is it possible to define the Regex expression at runtime?
    I mean as you have mentioned in this example to use hard coded Regex expression
    in the validation descriptor file, but i want to do in such a way so as to be able to 
    pass this regex expression from the action class at runtime.By doing this i should
    be able to do the validation dynamically from Action POJO/Bean.
    
    Appreciate any help in this thought of mine.
    
    Thanks,
    Steve

    Commented By ->
    Guddu
    Can you please show me an example using Client or Browser side JavaScript validation using Struts 2 ?
    
    Thanks in advance
    Are you interested in solving a very interesting Technology Stack while Playing this Game          

    Please write your Comment on this Matter
    (This will be visible if found suitable):
    Name: *
    Email (will not be displayed): *
    Matter: *
    31,6
    Enter bigger number from above :*
    Home >>> Struts Struts 2 Example Tutorial >>> Struts2 Validation Expression >>> Struts2 REGEX Example
    Visitor/User referred related external URL:
    (Visible upon review and approved by this site Administrator)
    
    Referred By Name *:
    Resource URL *: (e.g, URL should be starting with http://www.-----.---)
     
    Resource Short Description *:
    34,29
    Enter bigger number from above : *

    Please log in to add or reply to any matter<- requires login
    Log in or Register
    Copyright © 2008-2009, Interview-Questions-Tips-Forum, All Rights Reserved.
    CONTACT    PRIVACY POLICY    DISCLAIMER
    Terms of Use and Disclaimer :
    
    This web site provides some of the information about various technologies, example 
    code, tips, tutorials etc. Like any printed materials, content of these pages may 
    become out of date over a period of time. Therefore all visitor/users of this web 
    site are requested/advised to refer to the originating parties/sources for the 
    latest changes and happenings for detailed information. This information is not 
    intended to be a substitute for the original reference provided by the originating 
    parties/sources.
    
    By accessing and using this website in any ways, including, without
    limitation, browsing the website pages, using any information, using any content and/or 
    downloading any materials, you agree to and are bound by the terms of use 
    described in this page and Usage Terms and Conditions. 
    If you do not agree to all of 
    the terms and conditions contained in the terms of use described in this
    page and Usage Terms and Conditions, do not use this 
    website in any manner. If you are using the website on behalf of your 
    employer, you represent that you are authorized to accept these Terms of Use 
    on your employer's behalf.
    
    All Trademarks are property of their respective owner. Appropriate measure is being
    taken for providing accurate and up-to-date information but like any printed materials,
    these blog(s)/contents may eventually be outdated one day, so if you are using any 
    of these information, please refer original content/documentation from respective sources. 
    And under no circumstances shall the Author of these contents and/or this web site
    be liable for any loss, damage, expense incurred or suffered which is claimed to have
    occurred because of usage of the contents of this web site.
    If you have any questions/queries/feedback/suggestions then please write to this web
    site owner at contact.