您的位置:首页 > 编程语言 > Java开发

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

2014-01-16 10:57 316 查看
既然输入的参数总要交给相关的类(域对象)进行处理(执行操作或保存到数据库等),

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

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

示意图如下

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: