如何使用同一个Action中的不同方法
如何使用同一个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中的不同方法的更多相关文章
- 11SpringMvc_一个Action中,写多个类似的业务控制方法
我们要实现这么一个功能: 编写两个表单,提交到同一个Action中的不同的处理方法中.比如注册和登录,都提交到UserAction这个控制类中.但是这两个提交由userAction这个控制类不同的方法 ...
- 梳理:python—同一个类中的方法调用
为什么突然在此提到这个梳理问题呢? 因为在自己实践综合练习学过的知识时,突然觉得有些知识点的运用总是不成功,于是翻过课本进行回顾,总是觉得是对的,可是当再进一步思考“既然是对的,为什么在程序中总是不成 ...
- struts2的占位符*在action中的配置方法
转自:https://blog.csdn.net/u012546338/article/details/68946633 在配置<action> 时,可以在 name,class,meth ...
- Struts2学习(二)运行Action中方法的三种方式
1.运行execute()方法 一般的能够直接在action中书写execute,调用action时会自己主动运行此方法 2.配置method方法 在struts.xml中配置action时.写met ...
- 《同一个类中不同方法之间的调用相关问题(省略的类名或者this)》
//同一个类中不同方法之间的调用相关问题(省略的类名或者this) class A { public void B() { System.out.println("b方法运行"); ...
- Extjs中给同一个GridPanel中的事件添加参数的方法
Extjs中给同一个GridPanel中的事件添加参数的方法: this.isUse = new Ext.Action({ text:'启用', scope ...
- 如何将同一个APP中的不同activity在Recent(最近任务)中显示?
需求描述 在应用Application1中存在A.B两个activity,当在应用启动了A.B activity,点击Recent键,如何让A.B两个activity都显示在Recent界面(最近任务 ...
- 10.Action中的method属性
转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 在struts1.x中我们知道通过继承DispatchAction可以实现把 ...
- struts2.Action中的method属性配置
.Action中的method属性 在struts1.x中我们知道通过继承DispatchAction可以实现把多个Action进行统一操作,在struts2中实现action的统一操作也很简单.我们 ...
随机推荐
- Android使用ZXing生成带图片的二维码
效果图如下: 制作过程很简单的就是在原始的二维码图片上添加一个logn图标,代码的注释写得很详细,也就不给大家啰嗦了 package com.example.day44_02_qrcodewithlo ...
- paper 37 : WINCE的BIB文件解析
WINCE的BIB文件解析 BIB的全称为Binary Image Builder,在Wince编译过程中的最后MakeImage阶段会用到BIB文件,BIB文件的作用是指示构建系统如何构建二进制映像 ...
- Javascript中的json操作
<!doctype html> <html> <head> <title>extjs-json</title> <script typ ...
- DDR3简介(一)
JEDEC成立于1958年,作为电子产业协会联盟(EIA)的一部分,为新兴的半导体产业制定标准.主要功能包括术语定义,产品特征描述,测试方法,固态存储器,DRAM,闪存卡及射频识别标签等的确定与标准化 ...
- android 项目学习随笔四(优化ViewPager)
1.不能滑动的ViewPager import android.content.Context; import android.support.v4.view.ViewPager; import an ...
- Mac下使用Automator实现截屏编辑保存
以前在Windows下使用百度或者搜狗输入法的截图工具很方便.❶快捷键(Alt+X,我设置的是这个),❷选择区域,❸编辑所选区域,包括添加文字,线条框框,调色,❹点击『✔️』选择保存位置,修改文件名保 ...
- Linux 下多核CPU知识【转】
转自:http://www.cnblogs.com/dongzhiquan/archive/2012/02/16/2354977.html 1. 在Linux下,如何确认是多核或多CPU: #cat ...
- Linux内存管理原理【转】
转自:http://www.cnblogs.com/zhaoyl/p/3695517.html 本文以32位机器为准,串讲一些内存管理的知识点. 1. 虚拟地址.物理地址.逻辑地址.线性地址 虚拟地址 ...
- JS和CSS的多浏览器兼容(3)
3.Javascript的浏览器兼容性问题 3.1 集合类对象问题说明:IE下,可以使用()或[]获取集合类对象; Safari及Chrome下,只能使用[]获取集合类对象. 解决方法:统一使用[]获 ...
- [转]ConsumeContainerWhitespace property to remove blank space in SSRS 2008 report
转自:http://beyondrelational.com/modules/2/blogs/115/posts/11153/consumecontainerwhitespace-property-t ...