如何使用同一个Action中的不同方法

1.使用Action的DMI(Dynamic Method Invocation——动态方法调用)

(1)动态方法调用:

  表单元素的action不是直接为某个Action的名字,而是为:action="Action名!Action中的方法名"的形式,把请求指定到处理方法中去。

(2)简单的使用动态方法调用:

  1)完成以下需求:

    ①提交同一个表单,有username、password两个请求参数;

    ②有“登陆”“注册”两个按钮;

    ③提交给同一个Action,使用不同的处理逻辑;

    ④“登陆”——登陆的处理逻辑,这里直接跳转到登陆页;

    ⑤“注册”——注册的处理逻辑,这里直接跳转到注册页。

  2)定义一个处理请求的Action类,此Action类有两个处理逻辑:

  

public class WelcomeAction extends ActionSupport{
    //两个常量用于区分使用不同的处理逻辑
    public static final String LOGIN = "login";
    public static final String REGIST = "regist";
    //封装两个请求参数
    private String username;
    private String password;
    //setter、getter方法
    public void setUsername(String username){
        this.username = username;
    }
    public String getUsername(){
        return this.username;
    }
    public void setPassword(String password){
        this.password = password;
    }
    public String getPassword(){
        return this.password;
    }
    //处理逻辑1:登陆逻辑
    public String execute()throws Exception{
        if(getUsername().equals("jiagoushi")
                &&getPassword().equals("jiagoushi")){
            return LOGIN;
        }else{
            return ERROR;
        }
    }
    //处理逻辑2:注册逻辑
    public String regist()throws Exception{
        return REGIST;
    }
}

  3)写一个JSP页面,试用动态方法调用

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>首页</title>
</head>
<script type="text/javascript">
    function regist() {
        //获取表单
        thisForm = document.forms[0];
        //动态修改action属性
        thisForm.action = "welcome!regist";
    }
</script>
<body>
<form action="welcome">
    用户名:<input type="text" name="username"><br/>
    密码:<input type="password" name="password"><br/>
    <input type="submit" value="登陆">
    <input type="submit" value="注册" onclick="regist()">
</form>
</body>
</html>

   4)配置struts.xml

  

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <package name="package_a" extends="struts-default">
        <action name="welcome" class="myAction.WelcomeAction">
            <result name="login">login.jsp</result>
            <result name="error">error.jsp</result>
            <result name="regist">regist.jsp</result>
        </action>
    </package>
</struts>

2.指定<action>标签的method属性

(1)通过指定<action>标签的method属性,可以把一个Action定义成多个逻辑Action,如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <package name="package_a" extends="struts-default">
        <!-- 默认使用WelcomeAction类的execute()方法 -->
        <action name="welcome" class="myAction.WelcomeAction">
            <result name="login">login.jsp</result>
            <result name="error">error.jsp</result>
        </action>
        <!-- 指定使用WelcomeAction类的regist()方法 -->
        <action name="regist" class="myAction.WelcomeAction" method="regist">
            <result name="regist">regist.jsp</result>
        </action>
    </package>
</struts>

(2)修改之后,我们的JSP页面的代码就可以修改为:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>首页</title>
</head>
<script type="text/javascript">
    function regist() {
        //获取表单
        thisForm = document.forms[0];
        //动态修改action属性
        thisForm.action = "regist";
    }
</script>
<body>
<form action="welcome">
    用户名:<input type="text" name="username"><br/>
    密码:<input type="password" name="password"><br/>
    <input type="submit" value="登陆">
    <input type="submit" value="注册" onclick="regist()">
</form>
</body>
</html>

如何使用同一个Action中的不同方法的更多相关文章

  1. 11SpringMvc_一个Action中,写多个类似的业务控制方法

    我们要实现这么一个功能: 编写两个表单,提交到同一个Action中的不同的处理方法中.比如注册和登录,都提交到UserAction这个控制类中.但是这两个提交由userAction这个控制类不同的方法 ...

  2. 梳理:python—同一个类中的方法调用

    为什么突然在此提到这个梳理问题呢? 因为在自己实践综合练习学过的知识时,突然觉得有些知识点的运用总是不成功,于是翻过课本进行回顾,总是觉得是对的,可是当再进一步思考“既然是对的,为什么在程序中总是不成 ...

  3. struts2的占位符*在action中的配置方法

    转自:https://blog.csdn.net/u012546338/article/details/68946633 在配置<action> 时,可以在 name,class,meth ...

  4. Struts2学习(二)运行Action中方法的三种方式

    1.运行execute()方法 一般的能够直接在action中书写execute,调用action时会自己主动运行此方法 2.配置method方法 在struts.xml中配置action时.写met ...

  5. 《同一个类中不同方法之间的调用相关问题(省略的类名或者this)》

    //同一个类中不同方法之间的调用相关问题(省略的类名或者this) class A { public void B() { System.out.println("b方法运行"); ...

  6. Extjs中给同一个GridPanel中的事件添加参数的方法

    Extjs中给同一个GridPanel中的事件添加参数的方法: this.isUse = new Ext.Action({            text:'启用',            scope ...

  7. 如何将同一个APP中的不同activity在Recent(最近任务)中显示?

    需求描述 在应用Application1中存在A.B两个activity,当在应用启动了A.B activity,点击Recent键,如何让A.B两个activity都显示在Recent界面(最近任务 ...

  8. 10.Action中的method属性

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 在struts1.x中我们知道通过继承DispatchAction可以实现把 ...

  9. struts2.Action中的method属性配置

    .Action中的method属性 在struts1.x中我们知道通过继承DispatchAction可以实现把多个Action进行统一操作,在struts2中实现action的统一操作也很简单.我们 ...

随机推荐

  1. js 实现精确加减乘除

    //加法 function accAdd(arg1, arg2) { var r1, r2, m; try { r1 = arg1.toString().split(".")[1] ...

  2. Java中的并发线程操作(只贴代码,内有注释)

    package com.thread1; public class LiffOff implements Runnable{ protected int countDown = 10; private ...

  3. php字符串首字母转换大小写的实例

    in: 后端程序首字母变大写:ucwords() <?php$foo = 'hello world!';$foo = ucwords($foo); // Hello World!$bar = ' ...

  4. Report launcher to run SSRS report subscriptions on demand

    http://www.mssqltips.com/sqlservertip/3078/report-launcher-to-run-ssrs-report-subscriptions-on-deman ...

  5. OpenStack 界面开发中response.body的中文编码问题

    Contents [hide] 1 问题的引入= 1.1 解决办法 2 用户限制输入中文 3 不限制用户输入,呈现上修改 问题的引入= G在我们创建虚拟机的时候,会设置虚拟机的名称,描述,如果没有限制 ...

  6. SQL UNION 操作符

    转由http://www.w3school.com.cn/sql/sql_union.asp 这个网址的数据库知识,个人推荐,因为有实例,理解更透彻一些.非广告啊,个人感觉好啊 SQL UNION 操 ...

  7. django models数据类型

    Django Models的数据类型 AutoField IntegerField BooleanField true/false CharField maxlength,必填 TextField C ...

  8. ubuntu安装最新版本的node.js

    下面的方法适用于最新版本的Ubuntu.Ubuntu 12.04 LTS.Ubuntu 12.10.Ubuntu 13.04等版本.它可以帮助开发者在Ubuntu上安装Node.js,无需从头编译安装 ...

  9. andoid下的股票行情开发

    1.信息类 public class SinaStockInfo { /** * Sina股票数据接口 以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情,只需访问新浪的股票数据 * 接 ...

  10. jquery plugins

    jQuery官网插件 jQuery自定义滚动条样式插件 jQuery custom content scroller examples Twitter typeahead typeahead.js t ...