Struts2--课程笔记2
动态方法调用(在请求的时候,再明确具体的响应方法,配置的时候不明确):
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的更多相关文章
- SpringMVC框架 课程笔记
SpringMVC框架 课程笔记 第0章 SpringMVC框架的核心内容 1.SpringMVC 概述 2.SpringMVC 的 HelloWorld 3.使用 @RequestMapping 映 ...
- Linux内核分析课程笔记(一)
linux内核分析课程笔记(一) 冯诺依曼体系结构 冯诺依曼体系结构实际上就是存储程序计算机. 从两个层面来讲: 从硬件的角度来看,冯诺依曼体系结构逻辑上可以抽象成CPU和内存,通过总线相连.CPU上 ...
- (1/18)重学Standford_iOS7开发_iOS概述_课程笔记
写在前面:上次学习课程对iOS还是一知半解,由于缺乏实践,看公开课的视频有时不能很好地领会知识.带着问题去学习永远是最好的方法,接触一段时间iOS开发以后再来看斯坦福iOS公开课,又会有许多新的发现, ...
- Struts2学习笔记⑧
今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...
- Struts2学习笔记①
Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...
- Andrew Ng机器学习课程笔记(五)之应用机器学习的建议
Andrew Ng机器学习课程笔记(五)之 应用机器学习的建议 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7368472.h ...
- Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归)
title: Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归) tags: 机器学习, 学习笔记 grammar_cjkRuby: true --- 之前看过一遍,但是总是模 ...
- Andrew Ng机器学习课程笔记--汇总
笔记总结,各章节主要内容已总结在标题之中 Andrew Ng机器学习课程笔记–week1(机器学习简介&线性回归模型) Andrew Ng机器学习课程笔记--week2(多元线性回归& ...
- Andrew 机器学习课程笔记
Andrew 机器学习课程笔记 完成 Andrew 的课程结束至今已有一段时间,课程介绍深入浅出,很好的解释了模型的基本原理以及应用.在我看来这是个很好的入门视频,他老人家现在又出了一门 deep l ...
- 操作系统学习笔记----进程/线程模型----Coursera课程笔记
操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进 ...
随机推荐
- delphi 快捷键大全
************************* 1.功能键 2.组合键 3.其他快捷键 4.补充 5.补充1(带分类) 6.补充2 --Edit by 2013.1.14 ************ ...
- Java 代码性能优化
代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是, ...
- Git 添加自己分支 pull request
1.找到项目地址 这里,我们可以找到项目地址,比如:https://github.com/*****/Cplusplus_Thread_Lib,然后点击页面右上角的 "fork" ...
- TCP和UDP报文分片的区别
搞了三年网络,今天才知道这个细节,汗,总结下: MTU大家都知道,是链路层中的网络对数据帧的一个限制,依然以以太网为例,MTU为1500个字节.一个IP数据报在以太网中 传输,如果它的长度大于该MTU ...
- jQuery EasyUI的使用入门
jQuery EasyUI不是什么太高级的东西,就是用jQuery写了很多方法.定义了很多属性,通过调用这些方法.属性,可以达到一些特定的效果,然后我们再根据具体需求微调就好了.至少需要导入两个样式表 ...
- lr_save_var() 截取任意字符串长度,以参数形式输出(参数转变量)
Action() { char * desc=(char *)malloc(10); //定义指针变量,以变量形式存放截取到的参数值 // char * aa = "jadkshfkasd ...
- 第三天 函数 三元运算 lambda表达式 内置函数 文件操作
面向过程: 直接一行一行写代码,遇到重复的内容复制黏贴. 不利于代码阅读 代码没有复用 面向对象 将代码块定义为函数,以后直接调用函数 增强了复用性 函数的定义方法 def 函数名(传递参数): 函数 ...
- ubuntu 16.04下搭建web服务器(MySQL+PHP+Apache) 教程
1.开始说明 下面很多可能参照网上其中以为前辈的,但有所改进吧.这些设置可能会有所不同,你需要根据不同情况进行修改. 安装apache2 2.切换管理员身份 在ubuntu中需要用root身份进行操作 ...
- gulp学习笔记(一)
gulp 是基于 Nodejs 的自动任务运行器,能自动化地完成javascript/coffee/sass/less/html/image/css等文件的的测试.检查.合并.压缩.格式化.浏览器自动 ...
- linux安装包资源库
最近发现了一个很不错的linux的rpm资源库,可以在里面找到rpm安装过程中缺失的资源! 网址:http://pkgs.org/