Home Struts Struts2 Actions Struts 2 Redirect Action



Struts 2 Redirect Action
Posted on: May 24, 2009 at 12:00 AM
In this section, you will get familiar with struts 2 Redirect action and learn to use it in the struts 2 application.

Struts 2 Redirect Action

     

In this section, you will get familiar with struts 2 Redirect action and learn to use it in the struts 2 application.

Redirect After Post: This post pattern is supported by Struts 2. This is a common pattern in web application. In which an action is redirected to another action. This is a common use to redirect action to display a page.

Redirect Action Result: This redirect pattern is supported by Struts 2. The ActionMapper provided by the ActionMapperFactory is used to redirect the browser to a URL that invokes the specified action. You can see a simple implementation of this in the following struts 2 application. 

Redirects Dynamic Parameters: The action-redirect result takes following parameters:

  • actionName
  • namespace
  • method
  • encode
  • parse
  • location
  • prependServletContext

Follow the steps to develop a Redirect Action example:

Step 1: Create the struts.xml file and add the following xml snippet in the struts.xml file.

<?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>

  <!-- Rose India Struts 2 Tutorials -->
  <constant name="struts.enable.DynamicMethodInvocation" value="false" />
  <constant name="struts.devMode" value="true" />
<include file="struts-default.xml"/>
  <package name="roseindia" namespace="/roseindia" extends="struts-default">

  
  <!-- Redirect Action -->

 <action name="showAjaxLoginCancelForm">
  <result>/pages/ajaxloginCancel.jsp</result>
 </action>

  <action name="ajaxloginCancel" class="net.roseindia.Login">
  <result  name="input">/pages/ajaxloginCancel.jsp</result>
  <result  name="error">/pages/ajaxloginCancel.jsp</result>
  <result name="cancel" type="redirect">/pages/ajaxloginCancel.jsp</result>
  <result>/pages/ajaxloginsuccess.jsp</result>
  </action>
  
 <!-- Add actions here -->
  </package>


  <!-- Add packages here -->

</struts>

Step 2 : Create an input form.

ajaxloginCancel.jsp

<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
  <head>
  <s:head theme="ajax" debug="true"/>
  </head>
  <body>
  <s:div id="loginDiv" theme="ajax">
  <div style="width: 300px;border-style: solid">
  <s:form action="ajaxloginCancel"  validate="true">
  <tr>
  <td colspan="2">
  Login
  </td>
  </tr>
  <tr>
  <td colspan="2">
  <s:actionerror />
  <s:fielderror />
  </td>  
  <s:textfield name="username" label="Login name"/>
  <s:password name="password" label="Password"/>
  <s:submit value="Submit" theme="ajax" targets="loginDiv" notifyTopics="/ajaxloginCancel"/>
  <s:submit action="showAjaxLoginCancelForm" value="Cancel" onclick="form.onsubmit=null"/>
  
  </s:form>
  </div>
  </s:div>
  </body>
</html>

Step 3 : Create an Action class.

Login.java

package net.roseindia;
import com.opensymphony.xwork2.ActionSupport;
import java.util.Date;


/**
 * <p> Validate a user login. </p>
 */
public class Login extends ActionSupport {


  public String execute() throws Exception {
  if(!getUsername().equals("Admin") || !getPassword().equals("Admin")){
  addActionError("Invalid user name or password! Please try again!");
  return ERROR;
  }
  if(getUsername().equals("Admin") || getPassword().equals("Admin")){
  return SUCCESS;
  }else{
  return NONE;
  }
  }


  // ---- Username property ----

  /**
 * <p>Field to store User username.</p>
 * <p/>
 */
  private String username = null;


  /**
 * <p>Provide User username.</p>
 *
 * @return Returns the User username.
 */
  public String getUsername() {
  return username;
  }

  /**
 * <p>Store new User username</p>
 *
 * @param value The username to set.
 */
  public void setUsername(String value) {
  username = value;
  }

  // ---- Username property ----

  /**
 * <p>Field to store User password.</p>
 * <p/>
 */
  private String password = null;


  /**
 * <p>Provide User password.</p>
 *
 * @return Returns the User password.
 */
  public String getPassword() {
  return password;
  }

  /**
 * <p>Store new User password</p>
 *
 * @param value The password to set.
 */
  public void setPassword(String value) {
  password = value;
  }

}

Step 4 : Create the appropriate validator as shown: 

The validation.xml format is either <ActionClassName>-validation.xml or <ActionClassName>-<ActionAliasName>-validation.xml.

Login-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC 
  "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
  "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
  
<validators>
  <field name="username">
  <field-validator type="requiredstring">
  <param name="trim">true</param>
  <message>Login name is required</message>
  </field-validator>
  </field>
  <field name="password">
  <field-validator type="requiredstring">
  <param name="trim">true</param>
  <message>Password is required</message>
  </field-validator>
  </field>
</validators>

When entered the correct user name and password then the user gets the ajaxloginsuccess.jsp page displaying the entered text

ajaxloginsuccess.jsp

<html>
  <head>
  <title>Login Success</title>
  </head>
  <body>
  <p align="center"><font color="#000080" size="5"> Login Successful !</font></p>
  <h1> Welcome to <%=request.getParameter("username")%>  </h1>
  </body>
</html>

Output:

When this application executes you get the following:

When you don't fill any field and click "Submit" button, you get:

If you click the "Cancel" button then redirect action executes and provides:

Related Tags for Struts 2 Redirect Action:
cwebcomredirectapplicationiopatternthisactionappctetoedienotliinnomcadircommonppcatwhichsrectdirectatisiractttssthatiapicaicaplonomo


Ask Questions?    Discuss: Struts 2 Redirect Action   View All Comments

Post your Comment


Your Name (*) :
Your Email :
Subject (*):
Your Comment (*):
  Reload Image
 
 

Ask Questions?

If you are facing any programming issue, such as compilation errors or not able to find the code you are looking for.

Ask your questions, our development team will try to give answers to your questions.