struts2之ModelDriven
在Struts 2中,提供了另外一种直接使用领域对象的方式,就是让action实现com.opensymphony. xwork2.ModelDriven接口。ModelDriven让你可以直接操作应用程序中的领域对象(模型对象),允许你在Web层和业务逻辑层使用相同的对象。
ModelDriven接口中只有一个方法,如下:
@override
public T getModel();
该方法返回一个用于接收用户输入数据的模型对象。
在页面中,这个模型对象中的属性可以直接通过属性名来访问(如username),而不需要使用形如“user.username”这种格式的表达式,在action中也不需要为这个模型对象提供JavaBean风格的getter和setter方法。但是必须要在action中进行new操作,ModelDriven要使用泛型。
下面我们让在3.1节创建的LoginAction类实现ModelDriven接口,修改后的代码如例3-7所示。
例3-7 LoginAction.java
- package org.sunxin.struts2.ch03.action;
- import org.sunxin.struts2.ch03.model.User;
- import com.opensymphony.xwork2.Action;
- import com.opensymphony.xwork2.ModelDriven;
- public class LoginAction implements Action,ModelDriven<User>
- {
- private User user = new User();
- @Override
- public String execute() throws Exception
- {
- …
- //省略
- }
- @Override
- public User getModel()
- {
- return user;
- }
- }
修改login.jsp,修改后的代码如例3-8所示。
例3-8 login.jsp
- …
- <form action="login.action" method="post">
- <table>
- <tr>
- <td>用户名:</td>
- <td><input type="text" name="username"></td>
- </tr>
- <tr>
- <td>密码:</td>
- <td><input type="password" name="password"></td>
- </tr>
- <tr>
- <td><input type="reset" value="重填"></td>
- <td><input type="submit" value="登录"></td>
- </tr>
- </table>
- </form>
- …
LoginAction实现了ModelDriven接口,表单字段就不需要再使用“user.”前缀了。
修改success.jsp,修改后的代码如例3-9所示。
例3-9 success.jsp
- …
- <body>
- <h3><s:property value="username" />,欢迎您登录程序员之家网站(www.sunxin.org)。</h3>
- </body>
- …
那么什么时候应该直接使用领域对象,什么时候应该实现ModelDriven接口呢?
这两种方式实际上并没有本质的区别,对于大多数的应用,使用任何一种方式都可以。
此外,注意区别field-driven/model-driven:
field-driven:
属性驱动,action拥有自己的属性,这些属性一般是java的基本类型,并且提供属性的getter和setter方法。表单字段直接和action的属性对应。
private UserModel um;
public void setUm(UserModel um){
this.um = um;
}
public UserModel getUm(){
return this.um;
}
在jsp页面中,id:<input type=“text” name=“um.id”> 中间的um.id就是基于field-driven取值的。
model-driven:
实现了ModelDriven接口可以在action中直接获得例如User对象,它会将表单字段自动封装到所需对象(如User)里去。使用ModelDriven必须实现泛型的getModel方法,并实现泛型实例。
public class GroupAction implements ModelDriven<Group>{
private Group group;
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
@Override
public Group getModel() {
if(group==null) group = new Group();
return group;
}
public String addInput() {
//处理
return "success";
}
}
http://blog.csdn.net/heyutao007/article/details/5980607
加深理解可以再看:
http://www.cnblogs.com/Topless/archive/2012/01/17/2324980.html
区别field-driven/model-driven:
struts2之ModelDriven的更多相关文章
- 接触Struts2的ModelDriven<>接口
最近在学SSH框架,实战项目,用到了Struts2的ModelDriven<>接口,在这做一点记录 ModelDriven,意为模型驱动,意思是直接把实体类当成页面数据的收集对象 参考他人 ...
- struts2重点——ModelDriven
一.属性驱动 在目标 Action 类中,通过 setXxx() 方法来接收请求参数. 二.模型驱动 1.ParametersInterceptor 拦截器工作原理 ParametersInterce ...
- 关于struts2的modelDriven
今天做毕业设计,前台往后台赋值,习惯性的用了modelDriven.但是刚写完就奇怪它的机理是怎样的,它怎么知道我前台传的参是哪个Model的属性(之前用servlet都是手动),于是手贱的ctrl点 ...
- Struts2中ModelDriven的使用
它是Struts2种独有的一种接收用户输入的机制,想在项目中使用模型驱动 (ModelDriven)需要让Action实现com.opensymphony.xwork2.ModelDriven 接口, ...
- Struts2 之 modelDriven & prepare 拦截器详解
struts2 ModelDriven & Prepareable 拦截器 前面对于 Struts2 的开发环境的搭建.配置文件以及 Struts2 的值栈都已经进行过叙述了!这次博文我们讲解 ...
- Struts2之ModelDriven和Preparable拦截器
首先struts.xml文件配置如下 默认拦截器设置为paramsPrepareParamsStack <package name="default" namespace=& ...
- struts2之ModelDriven的用法
在Struts 2中,提供了另外一种直接使用领域对象的方式,就是让action实现com.opensymphony. xwork2.ModelDriven接口.ModelDriven让你可以直接操作应 ...
- Struts2之ModelDriven的使用
http://www.cnblogs.com/luoyanli/archive/2012/11/20/2778361.html 我们可以根据Action属性的不同将它分为两类:Field-Driven ...
- Struts2中ModelDriven的陷阱及其预防
页面表单 <form action="updateInput.action" method="post"> <input type=" ...
随机推荐
- jieba库的使用
jieba库的使用 jeiba库是一款很优秀的用于中文分词的第三方库,它通过一个汉词词典来确定汉字之间的关联概率,将概率较大的组成分词. 精准模式 把文本精准的分割开来,不存在冗余单词. jieba. ...
- shell函数与位置参数举例
- ESP8266物联网开发 一
其实学了这么多,最终目的还是在于物联网. 好吧,我们就在这个的基础上来吧,先摸索,边学边摸索. 去网上买了8266开发板... 遇到的问题: USB线的问题.从同事那随便搞了一根USB线,然后写好程序 ...
- Android_Refrogit与RxJava结合使用(转)
Refrogit与RxJava结合的使用 达到了非常简单就可以完成请求网络 一:1.0示例: 1.导入依赖 compile 'io.reactivex:rxjava:1.3.4'compile ...
- java 抽象的概念 抽象类的使用
package java10; /* 抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束 抽象类:抽象方法所在的类,必须是抽象类才行.在class之前写上abstract即可 如何 ...
- 全球的IPv6部署急剧增加,但中国几乎没有一个地方部署?
全球的IPv6部署继续增加,但中国在IPv6方面还需要努力,从部署图上分析,中国几乎没有几个地方是普及IPv6的.这6年来,自世界IPv6发布以来,全球网络和服务提供商的IPv6部署水平急剧增加.如图 ...
- 以IP地址的形式访问网站
一致以来我都习惯于用域名的方式来访问网站,看到同事用IP地址来访问网站,也仅仅只是好奇,试了一下也没成功,于是就放弃了. 最近发布了站点,客户并没有提供域名,于是通过IP地址访问的方法又在我的脑子里蹦 ...
- 4412 使用小度wifi
本文转载至:https://blog.csdn.net/robertsong2004/article/details/42985223 作者:刘老师,华清远见嵌入式学院讲师. FS_4412可以同链接 ...
- DIV 粘贴插入文本或者其他元素后,移动光标到最新处
此文主要是可编辑div光标位置处理 1:首先 设置一个可编辑的DIV,注意:设置 contenteditable="true" 才可以编辑DIV <div id=" ...
- phpstudy的80端口被占用问题
1.查看电脑中当前程序占用的端口和程序ID 当phpstudy设置端口号为80时显示占用,在命令行中输入:netstat -ano 就可以看到当前电脑中程序占用的端口和程序ID等等信息 2.查看正在运 ...