一、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接收参数的更多相关文章

  1. Struts2中Action接收参数的四种形式

    1.Struts2的Action接收参数的三种形式.      a. 使用Action的属性接收(直接在action中利用get方法来接收参数):                   login.js ...

  2. Struts2中Action接收参数的方法

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt112 Struts2中Action接收参数的方法主要有以下三种: 1.使用A ...

  3. Struts2中Action接收参数的方法主要有以下三种:

    Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数(最原始的方式):     a.定义:在Action类中定义属性,创建get和set方法:     b.接 ...

  4. Struts2中Action接收参数

    Struts2中Action接收参数的方法主要有以下三种: Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数:     a.定义:在Action类中定义属 ...

  5. Struts2学习八----------接收参数

    © 版权声明:本文为博主原创文章,转载请注明出处 接收参数 - 使用Action的属性接收参数 - 使用Domain Model接收参数 - 使用ModelDriven接收参数 实例 1.项目结构 2 ...

  6. 01_9_Struts用ModelDriven接收参数

    01_9_Struts用ModelDriven接收参数 1. 配置struts.xml文件 <package name="user" namespace="/use ...

  7. Struts2_用ModelDriven接收参数

    通过实现 ModelDriven 接口来接收请求参数,这种方法用的比较少,一般还是用前两种. 请求: <a href="user/user!add?name=xiaoer&ag ...

  8. struts2属性Struts2中属性接收参数中文问题和简单数据验证

    PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! 一:如果表单提交数据中有中文时,尽量应用post方式. 需要在Struts. ...

  9. 学习笔记之Struts2—浅析接收参数

    最近自己通过视频与相关书籍的学习,对action里面接收参数做一些总结与自己的理解. 0.0.接收参数的(主要)方法   使用Action的属性接收参数 使用DomainModel接收参数 使用Mod ...

随机推荐

  1. Unity中使用多构造函数(转)

    如果要实例化的类只有一个构造函数, 则使用方法很简单使用方法如下: 1 2 3 4 5 6 7 using (IUnityContainer container = new UnityContaine ...

  2. C#交错数组

    交错数组本质上是一维数组只不过这个一维数组里的元素都是数组.因为该一维数组里面的元素可以是任何大小的数组所以定义时只能以这样的格式定义 ][]; 定义完后必须对该数组进行初始化后方可进行赋值等操作否则 ...

  3. Java 用自带dom解析器遍历叶子节点内容

    一.XML文件config.xml,内容如下: <?xml version="1.0" encoding="UTF-8" standalone=" ...

  4. 用sql取出来的list需要处理成map的两种情况

    1. 原生sql: select a.id,a.name from a SQLQuery sqlQuery=this.getSession().createSQLQuery(sb.toString() ...

  5. 5.webService拦截器

    CXF为什么要设计拦截器? 为了在webservice请求过程中,能动态操作请求和响应数据, CXF设计了拦截器. 拦截器分类 1.按所处的位置分:服务器端拦截器,客户端拦截器 2.按消息的方向分:入 ...

  6. 如何获得DataGrid中某行某列的对象

    假如某行是 Xm_struct x = this.Brow.SelectedItem as Xm_struct;则下面分别是第5和第七列的对象 TextBlock Ddjs = this.Brow.C ...

  7. android 退出机制

    android sdk 退出机制的研究 有多种, 方法一.用list保存activity实例,然后逐一干掉 上代码: import java.util.LinkedList; import java. ...

  8. 小谈 - web模仿手机打电话与正则表达式

    昨天遇到了一个很棘手的问题,就是手机端调用web端的页面,如果用编辑器插入的内容页面中有电话的的数据就要变一下格式,让手机端可以实现拨号的功能. 研究了半天就是没一点头绪,但是偶尔看到数据中每一个电话 ...

  9. 深入理解Ember-Data特性(下)

    写在前面 最近比较忙,换了新工作还要学习很多全新的技术栈,并给自己找了很多借口来不去坚持写博客.常常具有讽刺意味的是,更多剩下的时间并没有利用而更多的是白白浪费,也许这就是青春吧,挥霍吧,这不是我想要 ...

  10. 微软正式发布Visual Studio 2013 Update 3 (2013.3) RTM

    昨天微软的Visual Studio 2013 Update 3(Visual Studio 2013.3)正式发布(RTM)了,做为微软认证金牌合作的葡萄城控件,我们组织力量第一时间进行翻译.分享给 ...