Struts 2 Validation Using Annotation

Struts2 Validation Using Annotation explains about step by step example of Struts2 Validation With Eclipse

Apache Struts 2, is a popular Java Model-View-Contraller (MVC) framework, which is developed by merging WebWork and Struts 1.x web frameworks.

Struts 2 have lot off difference with struts 1, struts 2 have implemented with an idea of convention over configuration, it also have many annotations in order to increase the developer productivity.

Struts 2 provides in built validation features. You can see how to validate the fields in struts 2, on below example

By using annotation in struts 2, you can remove struts.xml configuration

Note

When you deploy your struts 2 web application, you may get FilterDispatcher is deprecated! Please use the new filters! warning message, this is because FilterDispatcher filter is deprecated since Struts version 2.1.3, you need to re-configure your application with StrutsPrepareAndExecuteFilter

Note

By default Struts2 Convention plug-in tries to scan, action classes inside the packages like strut, struts2, action or actions. In our example package name is like net.javatips.net.action, so action class will taken from this package.

Also you need to implement com.opensymphony.xwork2.ActionSupport for annotations support

Required Libraries
  1. JDK 6
  2. Eclipse 3.7
  3. struts-2.3.15.1

Following jar must be in classpath

  1. asm-3.3.jar
  2. asm-commons-3.3.jar
  3. commons-fileupload-1.3.jar
  4. commons-io-2.0.1.jar
  5. commons-lang3-3.1.jar
  6. commons-logging-1.1.3.jar
  7. freemarker-2.3.19.jar
  8. javassist-3.11.0.GA.jar
  9. ognl-3.0.6.jar
  10. struts2-convention-plugin-2.3.15.1.jar
  11. struts2-core-2.3.15.1.jar
  12. xwork-core-2.3.15.1.jar

You can see the project structure below

Struts 2 Validation Using Annotation

Register.jsp

<%@taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<s:head />
</head>
<body>
	<s:form action="register" method="post">
		<s:textfield name="username" label="User Name" />
		<s:textfield name="age" label="Age" />
		<s:password name="password" label="Password" />
		<s:submit value="register" />
	</s:form>
</body>
</html>

RegisterSuccess.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
    <body>
        <h1>Register Success</h1>
    </body>
</html>

RegisterAction.java

Here is the action class, We are using Struts in built custom validate() method and throwing addFieldError()

You can see below Results tag, Here we have 2 results, if it is outcome is success it is forward to RegisterSuccess.jsp, otherwise it will show Register.jsp

@Results({
   
@Result(name="success", location="/RegisterSuccess.jsp"),
   
@Result(name="input", location="/Register.jsp")
})

Here @Results tag contains collection of results

package net.javatips.action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;

import com.opensymphony.xwork2.ActionSupport;
@Results({
  
@Result(name="success", location="/RegisterSuccess.jsp"),
  
@Result(name="input", location="/Register.jsp")
})

public class RegisterAction extends ActionSupport {

  
private static final long serialVersionUID = 1L;
  
private String username;
  
private Integer age;
  
private String password;

  
@Action(value = "/register")
  
public String execute() {
     
return "success";
  
}

  
public String getUsername() {
     
return username;
  
}

  
public void setUsername(String username) {
     
this.username = username;
  
}

  
public Integer getAge() {
     
return age;
  
}

  
public void setAge(Integer age) {
     
this.age = age;
  
}

  
public String getPassword() {
     
return password;
  
}

  
public void setPassword(String password) {
     
this.password = password;
  
}

  
public void validate() {
     
if (getUsername().length() == 0) {
        
addFieldError("username", "User Name is required");
     
} else if (!getUsername().equals("Rockey")) {
        
addFieldError("username", "Invalid User");
     
}
     
if (getPassword().length() == 0) {
        
addFieldError("password", "Invalid password");
     
}
     
if (getAge() == null) {
        
addFieldError("age", "Age required");
     
}
   }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	version="2.5">
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<session-config>
		<session-timeout>30</session-timeout>
	</session-config>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>
Run

You need to invoke http://localhost:8080/Struts2Validation/Register.jsp

Struts2 Validation Using Annotation

Struts2 Validation Using Annotation

Struts2 Validation Using Annotation

Struts2 Validation Using Annotation





Your email address will not be published. Required fields are marked *