Struts2 DomainModel、ModelDriven接收参数
一、DomainModel(域模型)
1、
应用场景:一般我们在struts2的action中接收参数通常是如下方式
package cn.orlion.user; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport{ private String username; private String password; public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String login(){ System.out.println("username=" + username);
System.out.println("password=" + password); return SUCCESS;
}
}
这样会产生一个问题,当我们要获取的属性增多的话比如我们要加上age、sex、birthday…等等这样我们就要写巨多的get\set方法。显然不可取,所以这时就可以用DomainModel来接收参数。
首先创建一个包:cn.orlion.model,然后创建一个User类,如下:
package cn.orlion.model; public class User { private String username; private String password; private String age; public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
}
}
将上边的UserAction改成:
package cn.orlion.user; import com.opensymphony.xwork2.ActionSupport; import cn.orlion.model.User; public class UserAction extends ActionSupport{ private User user; public String login(){ System.out.println("username=" + user.getUsername());
System.out.println("password=" + user.getPassword());
System.out.println("age=" + user.getAge()); return SUCCESS;
} public User getUser(){
return user;
} public void setUser(User user){
this.user = user;
}
}
当访问
http://localhost:8080/Struts2Demo1/user/login.action?user.username=1&user.password=2&user.age=3时就会在控制台打印出username=1
password=2
age=3
2、DTO(Data transfer
Object)数据传输对象
上边的代码已经很好的解决了属性过多的问题,但仍然存在一个问题:当我们有一个属性不能添加到user中时,(比如注册页面通常会有一个确认密码的输入框用来接收passwordConfim)怎么办?这时就可以用DTO解决。由DTO生成域对象。
首先创建一个包cn.orlion.dto,然后创建一个类UserDTO如下:
package cn.orlion.dto; public class UserDTO { private String username; private String password; private String passwordConfirm; private String age; public String getAge() {
return age;
} public void setAge(String age) { this.age = age;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getPasswordConfirm() {
return passwordConfirm;
} public void setPasswordConfirm(String passwordConfirm) {
this.passwordConfirm = passwordConfirm;
}
}
然后UserAction改为:
package cn.orlion.user; import com.opensymphony.xwork2.ActionSupport; import cn.orlion.dto.UserDTO;
import cn.orlion.model.User; public class UserAction extends ActionSupport{ private UserDTO userdto; public String login(){ String password = userdto.getPassword();
String passwordConfirm = userdto.getPasswordConfirm(); System.out.println(password + "-" + passwordConfirm); if (!password.equals(passwordConfirm)) {
System.out.println("两次输入密码不一致");
return ERROR;
} User user = new User(); user.setUsername(userdto.getUsername());
user.setPassword(userdto.getPassword());
user.setAge(userdto.getAge());
// 添加用户操作... return SUCCESS;
} public UserDTO getUserdto() {
return userdto;
} public void setUserdto(UserDTO userdto) {
this.userdto = userdto;
}
}
访问http://localhost:8080/Struts2Demo1/user/login.action?userdto.username=1&userdto.password=2&userdto.passwordConfirm=2&userdto.age=3
这样就可以了。
二、ModelDriven
这种方式是让Action类实现ModelDriven接口:
package cn.orlion.user; import com.opensymphony.xwork2.ModelDriven; import cn.orlion.model.User; public class UserAction implements ModelDriven<User>{ private User user; public String login(){ System.out.println(user.getUsername()); System.out.println(user.getPassword()); return "success";
} public User getUser(){
return user;
} public void setUser(User user){
this.user = user;
}
@Override
// 由于实现接口泛型指定为User所以返回值类型就不是Object而是User了。
public User getModel() { return user;
}
}
这样当访问http://localhost:8080/Struts2Demo/user/login.action?user.username=1&user.password=2控制台就会打印1、2。
Struts2 DomainModel、ModelDriven接收参数的更多相关文章
- Struts2中Action接收参数的四种形式
1.Struts2的Action接收参数的三种形式. a. 使用Action的属性接收(直接在action中利用get方法来接收参数): login.js ...
- Struts2中Action接收参数的方法
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt112 Struts2中Action接收参数的方法主要有以下三种: 1.使用A ...
- Struts2中Action接收参数的方法主要有以下三种:
Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数(最原始的方式): a.定义:在Action类中定义属性,创建get和set方法: b.接 ...
- Struts2中Action接收参数
Struts2中Action接收参数的方法主要有以下三种: Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数: a.定义:在Action类中定义属 ...
- Struts2学习八----------接收参数
© 版权声明:本文为博主原创文章,转载请注明出处 接收参数 - 使用Action的属性接收参数 - 使用Domain Model接收参数 - 使用ModelDriven接收参数 实例 1.项目结构 2 ...
- 01_9_Struts用ModelDriven接收参数
01_9_Struts用ModelDriven接收参数 1. 配置struts.xml文件 <package name="user" namespace="/use ...
- Struts2_用ModelDriven接收参数
通过实现 ModelDriven 接口来接收请求参数,这种方法用的比较少,一般还是用前两种. 请求: <a href="user/user!add?name=xiaoer&ag ...
- struts2属性Struts2中属性接收参数中文问题和简单数据验证
PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! 一:如果表单提交数据中有中文时,尽量应用post方式. 需要在Struts. ...
- 学习笔记之Struts2—浅析接收参数
最近自己通过视频与相关书籍的学习,对action里面接收参数做一些总结与自己的理解. 0.0.接收参数的(主要)方法 使用Action的属性接收参数 使用DomainModel接收参数 使用Mod ...
随机推荐
- linux下subversion server安装手册
linux下subversion server安装手册 安装基于的Linux版本为:Red Hat Enterprise Linux Server release 6.3. 一 准备需要的安装包. ( ...
- ubuntu安装octave的小坑
出现了以下情况: After this operation, 163 MB of additional disk space will be used.Do you want to continue? ...
- 编译系统中的LR与LL理解
编译原理:LL(1),LR(0),SLR(1),LALR(1),LR(1)对比 LL(1)定义:一个文法G是LL(1)的,当且仅当对于G的每一个非终结符A的任何两个不同产生式 A→α|β,下面的条件成 ...
- php面试题及答案收藏(转)
php面试题及答案收藏(这套试题是在网上看到的,不知作者是谁) 基础题 1.表单中 get与post提交方法的区别? 答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据, ...
- wangEditor ie9 表单上传图片
wangEditor ie9 表单上传图片 弹框无法消失 var resultText = $.trim(iframeWindow.document.body.innerHTML); result ...
- inno 实现水波特效
安装Inno Setup时如果选择了水波效果插件(如下图),将在Inno Setup的安装目录下自带有水波特效的例子,如路径:C:\Program Files (x86)\Inno Setup 5\E ...
- AIX常用命令总结
1.查看机器硬盘信息 :lspv :lsdev -Cc disk :lsattr -EI hdisk0 :lscfg -vl hdisk0 2.查看AIX系统版本号 : oslevel -s : os ...
- SSH三大框架笔面试总结
Java工程师(程序员)面题 Struts,Spring,Hibernate三大框架 1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建Sess ...
- 必应词典UWP版-开发小结
摘要 必应词典UWP版已经上线2周了!相信有不少用户都已经体验过了吧!得益于Win10全新.强大的API,新版词典在性能上.UI体验上都有了大幅的提升,今天,小编就为大家讲讲必应词典UWP开发的故事. ...
- 走进AngularJs(五)自定义指令----(下)
自定义指令学习有段时间了,学了些纸上谈兵的东西,还没有真正的写个指令出来呢...所以,随着学习的接近尾声,本篇除了介绍剩余的几个参数外,还将动手结合使用各参数,写个真正能用的指令出来玩玩. 我们在自定 ...