Struts2 学习笔记 —— 08 —— Action接收参数(2)

 

既然输入的参数总要交给相关的类(域对象)进行处理(执行操作或保存到数据库等),

那为什么不干脆直接将得到的参数付给域对象的相关属性呢

 

定义一个域对象(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不匹配时使用

 

示意图如下

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值