如何使用同一个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的统一操作也很简单.我们 ...
随机推荐
- ViewPager相互嵌套,导致子ViewPager无法滑动,且子ViewPager中的view无法被点击
场景:当使用ViewPager进行嵌套的时候,子viewPager是无法进行嵌套的,因此我们要重写ViewPager类,并重写里层viewPager类中的onTouchEvent方法,调用其父 ...
- Creating Directives that Communicate
<my-tabs> <my-pane title="Hello"> <h4>Hello</h4> <p>Lorem ip ...
- mongo快速翻页方法(转载)
翻阅数据是MongoDB最常见的操作之一.一个典型的场景是需要在你的用户界面中显示你的结果.如果你是批量处理的数据,同样重要的是要让你的分页策略正确,以便你的数据处理可以规模化. 接下来,让我们通过一 ...
- PAT乙级 1013. 数素数 (20)
1013. 数素数 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 令Pi表示第i个素数.现任给两个正整 ...
- 《zw版·Halcon-delphi系列原创教程》 3d汽车模型自动区域分割
<zw版·Halcon-delphi系列原创教程> 3d汽车模型自动区域分割 目前,图像分析,在3D设计,机器视觉方面拥有很广.这个Halcon脚本是3d汽车模型自动区域分割,很简单才20 ...
- fork系统调用(转载)
(1) fork系统调用说明 fork系统调用用于从已存在进程中创建一个新进程,新进程称为子进程,而原进程称为父进程.fork调用一次,返回两次,这两个返回分别带回它们各自的返回值,其中在父进程中的返 ...
- SQL关于apply的两种形式cross apply和outer apply(转载)
SQL 关于apply的两种形式cross apply 和 outer apply apply有两种形式: cross apply 和 outer apply 先看看语法: <lef ...
- 在线白板,基于socket.io的多人在线协作工具
首发:个人博客,更新&纠错&回复 是昨天这篇博文留的尾巴,socket.io库的使用练习,成品地址在这里. 代码已经上传到github,传送门.可以开俩浏览器看效果. 现实意义是俩人在 ...
- docker RESTful API
https://docs.docker.com/engine/reference/api/docker_remote_api/
- input放在a标签里面不能选择input里面的文本,IE9点击失效
input放在a标签里面不能选择input里面的文本,IE9点击失效 在IE浏览器中<input type="text" value="test" /&g ...