Wednesday, 13 May 2015

Struts2 : Preparable Interface

Struts2 provide Preparable interface, Any action class which implements Preparable interface, overrides the prepare method.

public interface Preparable {

    /**
     * This method is called to allow the action to prepare itself.
     *
     * @throws Exception thrown if a system level exception occurs.
     */
    void prepare() throws Exception;
   
}

Prepare interceptor calls prepare() on actions which implement Preparable. "prepare()" method called before the actual execute method runs.

Following example creates a registration form, with fields username, password, mailId, country, hobbies. The data for the hobbies, country is updated using the prepare method of the action class.

Step 1: Create new maven project “struts_tutorial”. Follow first 3 steps from the following link to make the project setup.


Step 2: create struts.xml. Since Struts 2 requires struts.xml to be present in classes folder. So create struts.xml file under the WebContent/WEB-INF/classes folder. Eclipse does not create the "classes" folder by default, so you need to do this yourself. To do this, right click on the WEB-INF folder in the project explorer and select New > Folder.

struts.xml
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
 <package name="default" extends="struts-default">
  <action name="getRegistration" class="learn.struts.GetRegistrationForm">
   <result name="success">/register.jsp</result>
  </action>
 </package>
</struts>

Step 3: Create register.jsp with following data.

register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>User Registration Form</title>
<s:head />
</head>
<body>
 <s:form name="registerform" action="registerUser">
  <s:textfield name="username" label="User Name" required="true" />
  <s:password name="password" label="Password" required="true" />
  <s:textfield name="email" label="Email Id" required="true" />

  <s:checkboxlist label="hobbies" list="hobbies" name="hobbies">
  </s:checkboxlist>
  
  <s:select list="country" label="Country" name="country"></s:select>
  <s:submit />
 </s:form>
</body>
</html>


Step 4: Create action class GetRegistrationForm.java, inside the package “learn.struts”.

package learn.struts;

import java.util.ArrayList;
import java.util.List;

import com.opensymphony.xwork2.Preparable;

public class GetRegistrationForm implements Preparable {
 private List<String> hobbies;
 private List<String> country;

 public List<String> getCountry() {
  return country;
 }

 public List<String> getHobbies() {
  return hobbies;
 }

 public String execute() {
  return "success";
 }

 @Override
 public void prepare() throws Exception {
  hobbies = new ArrayList<>();
  hobbies.add("Mobiles");
  hobbies.add("Game Consoles");
  hobbies.add("Laptops");
  hobbies.add("Portable Music Players");

  country = new ArrayList<>();
  country.add("India");
  country.add("Nepal");
  country.add("Japan");
  country.add("Sri Lanka");

 }
}
Run the Application and hit following URL. 

You will get following jsp page. Observe the jsp file, it contains the country and hobbies data, which I set in prepare method of action class.


Complete project structure looks like following.





Prevoius                                                 Next                                                 Home

No comments:

Post a Comment