动态方法调用(在请求的时候,再明确具体的响应方法,配置的时候不明确):

  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接收请求方式的更多相关文章

  1. Struts2学习---基本配置,action,动态方法调用,action接收参数

    首先我们先来直接配置,然后再来讲原理: 第一步:jar包的引入: 我们可以到struts2的官网上下载: http://struts.apache.org/download.cgi#struts251 ...

  2. Struts2-整理笔记(二)常量配置、动态方法调用、Action类详解

    1.修改struts2常量配置(3种) 第一种 在str/struts.xml中添加constant标签 <struts> <!-- 如果使用使用动态方法调用和include冲突 - ...

  3. Struts2学习四----------动态方法调用

    © 版权声明:本文为博主原创文章,转载请注明出处 Struts2动态方法调用 - 默认:默认执行方法中的execute方法,若指定类中没有该方法,默认返回success <package nam ...

  4. struts2笔记09-动态方法调用

    1.action配置 <action name="testDynamic" class="com.test.actions.TestAction"> ...

  5. 【SSH】——Struts2中的动态方法调用(一)

    首先我们来看一个简单的调用: 1.在web.xml中配置拦截器StrutsPrepareAndExecuteFilter.StrutsPrepareAndExecuteFilter实现了filter接 ...

  6. 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 ...

  7. 【SSH】——Struts2中的动态方法调用(二)

    当action中的方法有很多时,那应该怎么调用呢?上次我们提到的UserAction类中只有一个execute方法,如果我们需要增加用户的增删改查方法,如下: public class UserAct ...

  8. struts2的通配符与动态方法调用

    1.Action标签中的method属性 我们知道action默认的执行的方法是execute方法,但是一个action只执行一个方法我们觉得有点浪费,我们希望在一个action中实现同一模块的不同功 ...

  9. 01_5_Struts_ActionMethod_DMI_动态方法调用

    01_5_Struts_ActionMethod_DMI_动态方法调用 1. ActionMethod_DMI_动态方法调用 Action执行的时候并不一定要执行execute()方法 可以在配置文件 ...

随机推荐

  1. Milk Patterns POJ - 3261(后缀数组+二分)

    题意: 求可重叠的最长重复子串,但有一个限制条件..要至少重复k次 解析: 二分枚举k,对于连续的height 如果height[i] >= k 说明它们至少有k个元素是重复的,所以判断一下就好 ...

  2. [洛谷P3829][SHOI2012]信用卡凸包

    题目大意:有$n$张一模一样的信用卡,每个角进行了圆滑处理,问这些卡组成的“凸包”的周长 题解:发现是圆滑处理的圆心围成的凸包加上一个圆周即可 卡点:输入长宽弄反,然后以为是卡精 C++ Code: ...

  3. Android Support WorkManager使用详解

    使用WorkManager调度任务 WorkManager是一个库, 用以将工作入队, 当该工作的约束条件得到满足之后, WorkManager保证它的执行. WorkManager允许观测工作的状态 ...

  4. 第五周linux学习笔记

    第五章 系统调用 5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层.该层主要作用有三个. 它为用户空间提供了一种硬件的抽象接口. 系统调用保 证了系统的毡定和安全. 在第 3 ...

  5. WEB入门三 CSS样式表基础

    学习内容 Ø        CSS的基本语法 Ø        CSS选择器 Ø        常见的CSS样式 Ø        网页中3种使用CSS的方式 能力目标 Ø        理解CSS的 ...

  6. 解题:APIO 2014 序列分割

    题面 拆开式子我们发现切割顺序不影响答案,所以可以设计出一个$dp[i][j]$表示到$i$为止切了$j$刀的最大收益之类的,然后做个前缀和就可以转移了. $dp[i][j]=min(dp[i][j] ...

  7. 虚拟机中在centos6.7环境下安装eclipse

    采用的是在线安装的方式,所以省去了很多配置环境变量的步骤,经过以下5步. 1,  yum install eclipse 2,  安装xmanager -> windows下远程eclipse可 ...

  8. web中的懒加载

    在Web应用程序中,系统的瓶颈常在于系统的响应速度.如果系统响应速度过慢,用户就会出现埋怨情绪,系统的价值也因此会大打折扣.因此,提高系统响应速度,是非常重要的. Web应用程序做的最多就是和后台数据 ...

  9. Service Fabric Cluster Manager

    作者:潘罡 (Van Pan)@ Microsoft 我们回到Service Fabric最底层的话题,谈谈Service Fabric是怎么工作的. 首先,我们回到下面的文档,看看Service F ...

  10. linux基础命令之sed

    什么是sed? sed是一个流编辑器,英文全名为stream editor,流的意思就是能处理文件或者通过管    道传输来的数据.主要针对行,也就是行编辑.默认是不编辑文件的,处理时,把当前    ...