原创作者: 饕尽天下   阅读:15214次   评论:9条   更新时间:2011-06-01    

在这章中,你将熟悉一下Struts2重定向Action并学习如何在Struts2程序中使用它.

 

Post之后的重定向 : post模式由Struts2提供.web程序中是常见的模式.由一个action转发到另一个action.这是常见的用法转发action显示页面.

 

转发Action结果 : 重定向模式由Struts2提供.ActionMapperFactory提供的ActionMapper用来转发浏览器到URL指定的Action.在下面的Struts2程序中你能看到一个简单的实现.

重定向动态参数 : Action重定向结果带有下面的参数

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

仿照下面的步骤创建一个重定向Action例子 :

第一步 : 创建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>
    <!-- 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>

第二步 : 创建一个输入表单 : 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>

第三步 : 创建一个Action类: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;
    }

} 

创建一个适当的验证器 :

validation.xml的格式要么是<Action>-validation.xml或者<Action>-<Action别名>-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>

当输入正确的用户名和密码,用户会得到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>

输出 :

当程序执行的时候你会看到如下 :

当你什么字段都不填并点击"Submit"的时候,你会得到 :

如果你点击"Cancel"按钮,那么重定向Action并执行得到 :

  • 大小: 1.6 KB
  • 大小: 3.4 KB
  • 大小: 1.6 KB
评论 共 9 条 请登录后发表评论
9 楼 wjch_111 2012-06-19 16:58
还是觉得springmvc的好用。
8 楼 kevinwong 2012-02-26 20:47
建议把浏览器输入的地址栏也放入截图 这样容易前后对比阅读 帮助理解
7 楼 天空的雨 2009-12-17 11:27
谢谢lz,回去调试一下
6 楼 yangpanwww 2009-12-02 10:52
首先,我 非常非常的感谢你!  你 辛苦咯!

同时;我也希望 在 你 代码部门 写上 一些注释

我们都是 初学的人。。有些的东西还是不是很明白!  呵呵

在次 谢谢你 !
5 楼 hqm1988 2009-11-11 20:39
谢谢分享,学习了!
4 楼 ken.liu 2009-10-14 15:30
学习了,谢谢楼主分享,非常感谢!!!
3 楼 丁丁豆 2009-10-09 11:27
这个我懂也
2 楼 Checkmate 2009-03-27 21:12
gaojing_g 写道

支持一下~

谢了,还在翻译呢
1 楼 gaojing_g 2009-03-27 18:02
支持一下~

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics