Struts2笔记2--动态方法调用和Action接收请求方式
动态方法调用(在请求的时候,再明确具体的响应方法,配置的时候不明确):
LoginAction类中有两个方法some和second
1. 动态方法的调用(修改常量struts.enable.DynamicMethodInvocation):
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="demo" namespace="/test" extends="struts-default">
<action name="login" class="com.tongji.actions.LoginAction">
<result name="some">/some.jsp</result>
<result name="second">/second.jsp</result>
</action>
</package>
</struts>
html路径请求时使用 login!some.action 这种格式。
2. 使用通配符定义的Action:
<struts>
<package name="demo" namespace="/test" extends="struts-default">
<action name="login_*" class="com.tongji.actions.LoginAction" method="{1}">
<result name="some">/some.jsp</result>
<result name="second">/second.jsp</result>
</action>
</package>
</struts>
html路径请求时使用 login_second.action 这种格式。
Action接收请求参数:
1. 属性驱动方式:
指服务器段接收来自客户端的离散数据的方式。用户提交的数据,Action原封不动的进行逐个接收。该接收方式要求,在Action类中定义与请求参数同名的属性,即定义该属性的set方法。这样就能够使Action自动将请求参数的值赋予同名属性。
2. 域驱动方式:
指服务器端以封装好的对象方式接收来自客户端的数据方式。将用户提交的多个数据以封装的方式进行整体提交。该方式要求,表单提交时,参数以对象属性的方式提交。而Action中要将同名的对象定义为属性(为其赋予getter和setter)。这样请求将会以封装好的对象数据形式提交给Action。
Action中定义:
private Student student; //域属性,即对象属性
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
表单提交时:
用户名:<input type="text" name="student.name"/><br>
年龄:<input type="text" name="student.age"/><br>
页面获取参数时:
name = ${student.name}<br>
age = ${student.age}<br>
3. 集合数据接收:
指以集合对象方式接收数据。此情况与与域驱动接收数据原理是相同的。注意,必须是集合,不能是数组,因为数组不能自动扩展。
Action中定义:
private List<Student> students;
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
表单提交时:
用户名:<input type="text" name="students[0].name"/><br>
年龄:<input type="text" name="students[0].age"/><br>
页面获取参数时:
name = ${students[0].name}<br>
age = ${students[0].age}<br>
4. ModelDriven方式:
ModelDriven接收请求参数运行背后使用了Struts2的核心功能ValueStack。Struts2的默认拦截器中存在一个拦截器ModelDrivenInterceptor。当一个请求经过该拦截器时,在这个拦截器中,首先会判断当前调用的Action对象是否实现了ModelDriven接口。如果实现了这个接口,则调用getModel()方法,并把返回值压入ValueStack栈顶。
public class LoginAction implements ModelDriven<Student> {
private Student student;
public String execute() {
return "success";
}
@Override
public Student getModel() {
if (student == null) {
student = new Student();
}
return student;
}
}
表单提交时:
用户名:<input type="text" name="name"/><br>
年龄:<input type="text" name="age"/><br>
页面获取参数时:
name = ${name}<br>
age = ${age}<br>
Struts2笔记2--动态方法调用和Action接收请求方式的更多相关文章
- Struts2学习---基本配置,action,动态方法调用,action接收参数
首先我们先来直接配置,然后再来讲原理: 第一步:jar包的引入: 我们可以到struts2的官网上下载: http://struts.apache.org/download.cgi#struts251 ...
- Struts2-整理笔记(二)常量配置、动态方法调用、Action类详解
1.修改struts2常量配置(3种) 第一种 在str/struts.xml中添加constant标签 <struts> <!-- 如果使用使用动态方法调用和include冲突 - ...
- Struts2学习四----------动态方法调用
© 版权声明:本文为博主原创文章,转载请注明出处 Struts2动态方法调用 - 默认:默认执行方法中的execute方法,若指定类中没有该方法,默认返回success <package nam ...
- struts2笔记09-动态方法调用
1.action配置 <action name="testDynamic" class="com.test.actions.TestAction"> ...
- 【SSH】——Struts2中的动态方法调用(一)
首先我们来看一个简单的调用: 1.在web.xml中配置拦截器StrutsPrepareAndExecuteFilter.StrutsPrepareAndExecuteFilter实现了filter接 ...
- Struts2中DMI(动态方法调用)的错误问题(There is no Action mapped for namespace [/xxx] and action name [xxx!yyy] a)
默认的Struts.xml中是这样的 <constant name="struts.enable.DynamicMethodInvocation" value="f ...
- 【SSH】——Struts2中的动态方法调用(二)
当action中的方法有很多时,那应该怎么调用呢?上次我们提到的UserAction类中只有一个execute方法,如果我们需要增加用户的增删改查方法,如下: public class UserAct ...
- struts2的通配符与动态方法调用
1.Action标签中的method属性 我们知道action默认的执行的方法是execute方法,但是一个action只执行一个方法我们觉得有点浪费,我们希望在一个action中实现同一模块的不同功 ...
- 01_5_Struts_ActionMethod_DMI_动态方法调用
01_5_Struts_ActionMethod_DMI_动态方法调用 1. ActionMethod_DMI_动态方法调用 Action执行的时候并不一定要执行execute()方法 可以在配置文件 ...
随机推荐
- BZOJ3512 DZY Loves Math IV(杜教筛+线性筛)
注意到n很小,考虑枚举i.现在要求的是f(n,m)=Σφ(in) (i=1~m).显然当n没有平方因子时,φ(in)=φ(i)·φ(n/gcd(i,n))·gcd(i,n).利用φ*1=id又可得φ( ...
- Trailing Zeroes (II) LightOJ - 1090(预处理+前缀和)
求C(n,r)*p^q的后缀零 考虑一下 是不是就是求 10^k*m 的k的最大值 而10又是由2 和 5 组成 所以即是求 2^k1 * 5^k2 * m1 中k1和k2小的那一个数 短板效应嘛 ...
- Spanning Tree Protocol (STP) in NetScaler Appliance
Spanning Tree Protocol (STP) in NetScaler Appliance 来源 https://support.citrix.com/article/CTX112341 ...
- ZJOI2015地震后的幻想乡
题面链接 洛咕 sol %%%_rqy 本来想写正常的状压,看到这篇题解就入坑了... 直接搬题解吧,写的太好了不用解释. 慢慢搬,先咕着QAQ #include<cstdio> #inc ...
- 【BZOJ4197】【Noi2015】寿司晚宴
Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同 ...
- MyBatis.1入门篇
一:简介 MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statem ...
- Java之集合Collection
集合 初次学习集合过程中的学习笔记,学习顶层,使用底层.包括常用的API Collection接口 概述 集合 : 集合是Java中提供的一种容器,可以用来存储多个数据. 与数组的区别: 数组的长度是 ...
- 解题:PA 2014 Bohater
题面 我们把怪分成两类,打完了了能回血的和打完了不能回血的,然后分开打. 对于能回血的,我们先打攻击力低的,因为如果先打一个攻击力高的显然不一定能直接打过,所以先打一些攻击力低的回回血. 对于不能回血 ...
- img、列表和table标签
一.img图片 <body> <a href="https://www.fmtxt.com"> <img src="images/1.jpg ...
- Java基础-IO流对象之数据流(DataOutputStream与DataInputStream)
Java基础-IO流对象之数据流(DataOutputStream与DataInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据流特点 操作基本数据类型 ...