、请求参数的注入

在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请求参数注入的三种方式的更多相关文章

  1. ASP.NET MVC中使用Unity进行依赖注入的三种方式

    在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...

  2. Struts中的数据处理的三种方式

    Struts中的数据处理的三种方式: public class DataAction extends ActionSupport{ @Override public String execute() ...

  3. Spring静态注入的三种方式

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chen1403876161/article/details/53644024Spring静态注入的三 ...

  4. Spring注解依赖注入的三种方式的优缺点以及优先选择

    当我们在使用依赖注入的时候,通常有三种方式: 1.通过构造器来注入: 2.通过setter方法来注入: 3.通过filed变量来注入: 那么他们有什么区别吗?应该选择哪种方式更好? 三种方式的区别小结 ...

  5. SSH深度历险(八) 剖析SSH核心原理+Spring依赖注入的三种方式

           在java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依 ...

  6. SSH深度历险记(八) 剖析SSH核心原则+Spring依赖注入的三种方式

           于java发育.一类程序猿必须依靠类的其他方法,它是通常new依赖类的方法,然后调用类的实例,这样的发展问题new良好的班统一管理的例子.spring提出了依赖注入的思想,即依赖类不由程 ...

  7. 5、struct2的获得jsp参数的第三种方式

    在前面已经讲解了通过在action中直接通过jsp的参数和ModelDiver的方式获得浏览器传递的参数,下面我们介绍第三种方式,也是在项目开发中推荐的方式 action不需要在实现ModelDriv ...

  8. 在ASP.NET MVC中使用Unity进行依赖注入的三种方式

    在ASP.NET MVC4中,为了在解开Controller和Model的耦合,我们通常需要在Controller激活系统中引入IoC,用于处理用户请求的 Controller,让Controller ...

  9. spring4之依赖注入的三种方式

    1.Setter注入 <bean id="helloWorld" class="com.jdw.spring.beans.HelloWorld"> ...

随机推荐

  1. 关于sparksql操作hive,读取本地csv文件并以parquet的形式装入hive中

    说明:spark版本:2.2.0 hive版本:1.2.1 需求: 有本地csv格式的一个文件,格式为${当天日期}visit.txt,例如20180707visit.txt,现在需要将其通过spar ...

  2. 【调试】Idea如何远程debug之SpringBoot jar包启动

    一.Java -jar启动添加如下参数 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address= -Xdebug是通知JVM工 ...

  3. Vue.js表单校验;动画指令;避免内存泄露。

    Vue.js表单校验: 动画指令:创建自定义的滚动指令. 避免内存泄露. 避免内存泄露 在单页面应用开发时SPA,用户无需刷新浏览器.所以javascript应用需要自行清理组件来防止内存占用不断增长 ...

  4. org.json.JSONException: JSONObject["shophours"] not found.

    没有这个元素造成的.问题代码: value = jsonObject.get(entry).toString(); 分析原因: json中没有这个key,更没有这个key所对应的值 解决办法:判断一下 ...

  5. 『MXNet』第三弹_Gluon模型参数

    MXNet中含有init包,它包含了多种模型初始化方法. from mxnet import init, nd from mxnet.gluon import nn net = nn.Sequenti ...

  6. shiro缓存机制

    Shiro提供了类似于Spring的Cache抽象,即Shiro本身不实现Cache,但是对Cache进行了又抽象,方便更换不同的底层Cache实现.对于Cache的一些概念可以参考我的<Spr ...

  7. javaweb项目静态资源被拦截的解决方法

    <servlet-mapping> <servlet-name>springMvc</servlet-name> <url-pattern>/*< ...

  8. h5手机端禁止缩放问题

    最近测试html5页面,发现默认都允许用户缩放页面,或者在屏幕双击放大或缩小.即相当于这样设置 <meta name="viewport" content="wid ...

  9. array 数组去重 过滤空值等方法

    去重操作 第一种方式, ES 6 引入的新书据结构 Set 本身就是没有重复数据的, 可以使用这个数据结构来转化数组.时间复杂度 O(n) 123456 const target = [];const ...

  10. 使用SetInterval时函数不能传参问题

    无论是window.setTimeout还是window.setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,这就需要想方法解决.经网上查询后整理如下:例如对于函 ...