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()方法 可以在配置文件 ...
随机推荐
- forEach遍历数组对象且去重
forEach遍历数组对象 var obj1 = [{ key: '01', value: '哈哈' }, { key: '02', value: '旺旺' }, { key: '03', value ...
- SpringBoot项目部署进阶
一.war包部署 通过“云开发”平台初始化的SpringBoot项目默认采用jar形式打包,这也是我们推荐的方式.但是,因为某些原因,软件需求方特别要求用war形式打包,我们该怎么做? 1.项目尚未开 ...
- http站点如何启用为https站点?对收录的影响
首先看一下百度官方对https站点的态度:百度开放收录https站点公告 百度搜索再次推出:全面支持https页面直接收录:另外从相关性的角度,百度搜索引擎认为权值相同的站点,采用https协议的页面 ...
- 【刷题】BZOJ 1537 [POI2005]Aut- The Bus
Description Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 到 m编号. 每个路口用两个 ...
- BZOJ 3357: [Usaco2004]等差数列
3357: [Usaco2004]等差数列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 338 Solved: 160[Submit][Statu ...
- 解题:HAOI 2012 道路
题面 这题不开O2怎么过=.= 可能这种有关最短路的计数题做多了就有些感觉了...... 以每个点为基准跑出一张最短路图,然后对每个边$(u,v)$统计两个东西.一个$pre[u]$表示到达$u$这个 ...
- Rsync实现文件同步的算法(转载)
Rsync文件同步的核心算法 文章出处:http://coolshell.cn/articles/7425.html#more-7425 rsync是unix/linux下同步文件的一个高效算法,它能 ...
- Ubuntu14.04 Tab键自动补全
Unbuntu14.04 终端中使用Tab键不能自动补全 解决方案 1.利用vi编辑器打开 /etc/bash.bashrc文件(需要root权限) sudo vi /etc/bash.bashrc ...
- PHP常亮
define('PI','3.14'); echo PI; 名字大写,创建后不能修改和销毁 销毁变量用unset()
- CentOS安装Confluence Wiki步骤
参考:http://supernetwork.blog.51cto.com/2304163/1187066 参考:http://yjiang.tk/?p=1085 需要的文件 CentOS-6.5 ...