struts请求参数注入的三种方式
、请求参数的注入
在Struts2框架中,表单的提交的数据会自动注入到与Action对象相对应的属性。它与Spring框架中的IoC的注入原理相同,通过Action对象为属性提供setter方法注入
要求:
jsp中表单的name属性与Action中对应的属性的setter方法对应。要注入属性值的Action对象,必须为该属性提供setXXX()方法,因为Struts2的内部实现是按照JavaBean规范中提供的setter方法,自动为属性注入值
所以一般在Action中注入的属性的属性名与表单对应控件的name值相等,且该属性提供getXXX()、setXXX()方法
域模型DomainModel
我们使用有相同点的属性都喜欢把它封装,这样比较结构化,简单明了。第一种方式注入请求参数在参数过多的情况下可能造成action中的代码过多
将一些属性信息封装成一个实体对象的属性。操作领域对象的方法,在Action对象中引用某一实体对象,并且http请求的参数值可以注入到实体对象的属性上,这种方式i就是struts2提供的DomainModel的方式
注意:使用域模型的时候,jsp中的表单空间的name属性应该与Action中的对象和bean中的属性对应,格式为 对象.属性 ,例如:user.name
public Class User{
private String name;
private String password;
private int age;
public void setName(String name){this.name=name;}
public String getName(){return name;}
public void setPassword(String password){this.password=password;}
public String getPassword(){return password;}
public void setAge(int age){this.age=age;}
public int getAge(){return age;}
}
public Class UserAction extends ActionSupport{
private User user;
public void setUser(User user){this.user=user;}
public User getUser(){return User;}
public String execute() throws Exception{
return "success";
}
}
<body>
<s:form action="userAction" method="post">
<s:textfield name="user.name" label="用户名"/>
<s:password name="user.password" label="密码" />
<s:textfield name="user.age" label="年龄"/>
<s:submit value="注册"/>
</s:form>
</body>
驱动模型ModelDriven
在域模型DomainModel中,虽然struts2的Action对象可以通过直接定义实例对象的引用来调用实体对象进行相关的操作,但要求的参数必须是指定参数对应的实体对象,例如上李忠需要指定参数名称为user.name这种形式,有点不方便
驱动模型不需要指定参数所属的对象引用。Struts2的API中,提供了一个名为ModelDriven的接口,Action对象可以通过实现此接口获取指定的实体对象,获取的方式是实现ModelDriven提供的getModel()方法进行获取,其语法格式为: T getModel();
注意:驱动模型必须实例化对象类型的那个成员变量,否则空指针错误
处理流程
Struts2实例化Action对象,判断Action对象是否实现ModelDriven接口,如果实例化了该接口,就会调用getModel()获得实体对象模型并将其返回。后面就可以直接使用该对象的属性了。
public Class User{
private String name;
private String password;
private int age;
public void setName(String name){this.name=name;}
public String getName(){return name;}
public void setPassword(String password){this.password=password;}
public String getPassword(){return password;}
public void setAge(int age){this.age=age;}
public int getAge(){return age;}
}
public Class UserAction extends ActionSupport implements ModelDriven{
private User user;
@Override
public User getModel(){
return this.user;
}
public String execute() throws Exception{
return "success";
}
}
<body>
<s:form action="userAction" method="post">
<s:textfield name="name" label="用户名"/>
<s:password name="password" label="密码" />
<s:textfield name="age" label="年龄"/>
<s:submit value="注册"/>
</s:form>
</body>
struts请求参数注入的三种方式的更多相关文章
- ASP.NET MVC中使用Unity进行依赖注入的三种方式
在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...
- Struts中的数据处理的三种方式
Struts中的数据处理的三种方式: public class DataAction extends ActionSupport{ @Override public String execute() ...
- Spring静态注入的三种方式
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chen1403876161/article/details/53644024Spring静态注入的三 ...
- Spring注解依赖注入的三种方式的优缺点以及优先选择
当我们在使用依赖注入的时候,通常有三种方式: 1.通过构造器来注入: 2.通过setter方法来注入: 3.通过filed变量来注入: 那么他们有什么区别吗?应该选择哪种方式更好? 三种方式的区别小结 ...
- SSH深度历险(八) 剖析SSH核心原理+Spring依赖注入的三种方式
在java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依 ...
- SSH深度历险记(八) 剖析SSH核心原则+Spring依赖注入的三种方式
于java发育.一类程序猿必须依靠类的其他方法,它是通常new依赖类的方法,然后调用类的实例,这样的发展问题new良好的班统一管理的例子.spring提出了依赖注入的思想,即依赖类不由程 ...
- 5、struct2的获得jsp参数的第三种方式
在前面已经讲解了通过在action中直接通过jsp的参数和ModelDiver的方式获得浏览器传递的参数,下面我们介绍第三种方式,也是在项目开发中推荐的方式 action不需要在实现ModelDriv ...
- 在ASP.NET MVC中使用Unity进行依赖注入的三种方式
在ASP.NET MVC4中,为了在解开Controller和Model的耦合,我们通常需要在Controller激活系统中引入IoC,用于处理用户请求的 Controller,让Controller ...
- spring4之依赖注入的三种方式
1.Setter注入 <bean id="helloWorld" class="com.jdw.spring.beans.HelloWorld"> ...
随机推荐
- Python自学:第二章 数字 整数
>>>2 + 3 5 >>>3 - 2 1 >>>3 * 2 6 >>>3 / 2 1.5
- p1467 Runaround Numbers
直接搜就行. #include <iostream> #include <cstdio> #include <cmath> #include <algorit ...
- 轮播,试用与微信公众号,apicloud苹果安卓
<head> <script type="text/javascript" src="script/jquery.min.js">< ...
- 4.1.6 Grundy数-硬币游戏2
Problem Description: Alice 和 Bob 在玩一个游戏.给定 k 个数字 a1,a2,……,ak.一开始,有n堆硬币,每堆各有 Xi 枚硬币.Alice 和 Bob 轮流选出一 ...
- 关于export和export default的区别
ES6的模块化中,export与export default都可以用于导出常量.函数.文件.模块等,我们可以通过在其它文件或模块中import(常量.函数.文件.模块)的方式导入,但在一个文件或模块中 ...
- python-django rest framework框架之渲染器
渲染器 看到的页面时什么样子的,返回数据. restframework中默认就是下面 这两个render类,它的内部实现原理是拿url中的后缀名 .json 和类中的format字段进行比较,如果re ...
- spring-boot 全面认知
https://blog.csdn.net/ityouknow/article/details/80490926,这个链接非常全面的讲解了spring-boot的内容,从初级到中级,到最后的提升,觉得 ...
- Hive QL的实例
1.创建电影评分表 create table film_table ( userid int, movieid int, rating int, unixtime string ) row forma ...
- java旅程(二) 基本语法
java变量: 数值型 整数类型(byte,short,int,long)浮点类型(float,double) 字符型 char 基本数据类型 ...
- zookeeper 食谱
以示例形式说明 zk 食谱. 假定有 4 个客户端,分别执行 create -s -e /lock/read xx 或 create -s -e /lock/write 获取锁. 一.获取读锁的情况: ...