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 ...
随机推荐
- VS2012下配置OpenCV2.4.5
最近在折腾了一下VS2012的OpenCVS2.4.5配置,同VS2010下基本相同,做个简单的记录,以备日后查阅. 1. 安装OpenCV 从OpenCV官网:http://opencv.org/下 ...
- test-output目录中找不到testng-fail.xml原因+Reportng+ant build.xml文件
test-output目录中找不到testng-fail.xml原因: 在没有加入Reportng 报告的相关jar包前,在test-output目录下是有testng-fail.xml,后面加入了R ...
- 读bootstrap2.3.2有感2
排版: Bootstrap定义的全局 font-size 是 14px,line-height 是 20px.这些样式应用到了 <body> 和所有的段落上.另外,对 <p> ...
- position定位
CSS盒模型和定位的类型 为了搞清楚定位首先你得了解CSS盒模型.在上一句中的链接是我写在InstantShift 中的一篇关于盒模型的文章.我在那篇文章做了详细的讲解并会在这篇文章中做一个快速的总结 ...
- angular2 递归导航菜单实现方式
看了网上很多源码,基本都是采用循环三级的方式.如果是无限级的菜单,就无法实现了. 菜单格式: [ { "title": "Item-1", "icon ...
- Java Spring AOP用法
Java Spring AOP用法 Spring AOP Java web 环境搭建 Java web 项目搭建 Java Spring IOC用法 spring提供了两个核心功能,一个是IoC(控制 ...
- Mac OS X 10.9.3 UI 设置界面无法设置时区解决
10.9.3 在选项设置里无法设置时区,表现为选择时区的点的位置后无法保存,导致系统时间错乱,解决方法是用终端设置: sudo systemsetup -gettimezone sudo system ...
- DWZ错误的解决:0x800a13af - Microsoft JScript 运行时错误: 重新声明常量“document”
在写完Login后,需要跳转到Index中,就是DWZ的主界面,结果出现如下问题: 0x800a13af - Microsoft JScript 运行时错误: 重新声明常量“document” 费了很 ...
- dojo/dom-geometry元素大小
在进入源码分析前,我们先来点基础知识.下面这张图画的是元素的盒式模型,这个没有兼容性问题,有问题的是元素的宽高怎么算.以宽度为例,ff中 元素宽度=content宽度,而在ie中 元素宽度=conte ...
- PSP记录个人项目耗时
PSP2.1 Personal Software Process Stage Time Planning 计划 90 ·Estimate ·估计这个任务需要多长时间 90 Development 开发 ...