Struts2 学习笔记 —— 08 —— Action接收参数(2)
2014-01-16 10:57
316 查看
既然输入的参数总要交给相关的类(域对象)进行处理(执行操作或保存到数据库等),
那为什么不干脆直接将得到的参数付给域对象的相关属性呢
定义一个域对象(Domain Model)
在UserAction类中不再定义单独的属性值,而是定义这个User类
struts.xml与之前相同
访问时,链接如下图所示
输出结果如下
注意:Action类中不要自己new User对象,struts会帮你new
但是这里有一个问题:有时候接收的参数与Domain Model需要的参数不相符
例如Domain Model只需要user和password,对应数据库中的值
但是用户的输入可能还包含确认密码(不考虑前台校验的情况,举例子)
这样Domain Model就无法接收这个值了
解决方法:
1、用属性接收,然后传给Domain Model
2、使用VO(Value Object)/DO(Data Object)/DTO(Data Transfer Object)
定义一个UserDTO类
在UserAction中不再使用User类接收参数,而用UserDTO接收参数
当把所有参数传入以后,再由UserDTO创建一个User对象,将需要的属性传入
这就是DTO(Data Transfer Object)数据传输对象
作用就是“接收+传递”,在接收参数和Domain Model不匹配时使用
示意图如下
那为什么不干脆直接将得到的参数付给域对象的相关属性呢
定义一个域对象(Domain Model)
package com.demo.struts2.model; public class User { private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
在UserAction类中不再定义单独的属性值,而是定义这个User类
public class UserAction extends ActionSupport { private User user; public String add(){ System.out.println("name:" + user.getName() + ", age:" + user.getPassword()); return SUCCESS; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
struts.xml与之前相同
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <constant name="struts.devMode" value="true" /> <package name="user" namespace="/user" extends="struts-default"> <action name="user" class="com.demo.struts2.action.UserAction"> <result> /user_add_success.jsp </result> </action> </package> </struts>
访问时,链接如下图所示
输出结果如下
注意:Action类中不要自己new User对象,struts会帮你new
但是这里有一个问题:有时候接收的参数与Domain Model需要的参数不相符
例如Domain Model只需要user和password,对应数据库中的值
但是用户的输入可能还包含确认密码(不考虑前台校验的情况,举例子)
这样Domain Model就无法接收这个值了
解决方法:
1、用属性接收,然后传给Domain Model
2、使用VO(Value Object)/DO(Data Object)/DTO(Data Transfer Object)
定义一个UserDTO类
package com.demo.struts2.dto; public class UserDTO { private String name; private String password; private String confirmPassword; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getConfirmPassword() { return confirmPassword; } public void setConfirmPassword(String confirmPassword) { this.confirmPassword = confirmPassword; } }
在UserAction中不再使用User类接收参数,而用UserDTO接收参数
当把所有参数传入以后,再由UserDTO创建一个User对象,将需要的属性传入
这就是DTO(Data Transfer Object)数据传输对象
作用就是“接收+传递”,在接收参数和Domain Model不匹配时使用
示意图如下
相关文章推荐
- Struts2_学习笔记(三)--------Action接收参数的四种方法
- Struts2 学习笔记 —— 07 —— Action接收参数(1)
- Struts2 学习笔记 —— 09 —— Action接收参数(3)
- Struts2 学习笔记 —— 10 —— Action接收参数时的中文乱码问题
- struts2学习笔记----用action的属性接受参数
- Struts2学习---基本配置,action,动态方法调用,action接收参数
- Struts2学习之常用配置及action接收参数
- Struts2学习---基本配置,action,动态方法调用,action接收参数
- 学习笔记-----------struts2请求参数接收
- struts2学习笔记----------struts2.1.6接收中文请求参数乱码问题
- Struts2学习之Action接收参数方法一(属性接收参数(属性驱动))
- Struts2学习之Action接收参数方法二(用DomainModel接收参数(模型驱动))
- Struts2学习笔记1----Struts2框架action与view之间的参数传递小测试!
- [struts2]struts2中action接收参数的方法
- Struts2 入门 三(Struts Action类的实现方式 接收参数的方式 )
- 【Struts2学习笔记】struts2.5使用通配符配置action跳转
- [forwarding] Struts2中action接收中文参数为乱码解决方法
- Struts2中Action接收参数的方法主要有以下三种:
- struts2 的学习笔记(四) Struts的Action的创建方式
- 学习笔记4-Action参数绑定