struts2_接收参数

struts2_接收参数有三种方法,属性驱动,模型驱动,域模型。

1、属性驱动

  action中,声明属性user和age,并且一定要写setter()和getter()方法。使用时,直接使用user和age就可以。

package com.bjsxt.struts2.user.action;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
    
    private String name;
    private int age;
    
    public String add() {
        System.out.println("name=" + name);
        System.out.println("age=" + age);
        return SUCCESS;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }    
}
View Code

  传入参数时,变量名和action中的属性名要一一对应,实际测试是和setter()方法对应,但是绝大多数情况下setter()方法和属性名是一致的,所以可以认为action中的user和age,在传入参数时,也要用user和age传入。

<a href="user/user!add?name=a&age=8">添加用户</a>
View Code


2、模型驱动

  首先要建一个JavaBean,User

package com.bjsxt.struts2.user.model;

public class User {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
View Code

  action中,要实现ModelDriven<User>接口,而且要泛型User,

  new一个User对象,

private User user = new User();

  重写getModel()方法,切忌,右键生成的重写方法,默认 return null,一定要改成return user;

      使用user的属性需要使用user的getter()方法。

package com.bjsxt.struts2.user.action;

import com.bjsxt.struts2.user.model.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class UserAction extends ActionSupport implements ModelDriven<User>{
    
    private User user = new User();
    
    public String add() {
        System.out.println("name=" + user.getName());
        System.out.println("age=" + user.getAge());
        return SUCCESS;
    }

    @Override
    public User getModel() {
        // TODO Auto-generated method stub
        return user;
    }    
}
View Code

  参数传入时,变量名和JavaBean的属性名一致。

<a href="user/user!add?name=a&age=8">添加用户</a>
View Code

3、域模型
  建一个JavaBean,同模型驱动,不多说了。

  声明一个User对象,但是不需要new,struts2会帮我们new,但是要写setter()和getter()方法,

  使用user的属性需要使用user的getter()方法。

package com.bjsxt.struts2.user.action;

import com.bjsxt.struts2.user.model.User;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
    
    private User user;
    //private UserDTO userDTO;
    public String add() {
        System.out.println("name=" + user.getName());
        System.out.println("age=" + user.getAge());
        return SUCCESS;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }    
}
View Code

  传入参数时,需要写  对象.属性=值,此处不同于模型驱动和属性驱动

<a href="user/user!add?user.name=a&user.age=8">添加用户</a>
View Code

  该方法有一点要注意,有时需要传入的对象或者说对象个数和JavaBean不一致,例如JavaBean只有name和password,但是传入的参数有name、password和confirmingPassword,就是确认密码,这时action就不能直接用User对象了,需要使用一个数据传输对象(dto),其实就是另外一个JavaBean,包含3个属性,接收参数后,经过处理,将name和password的值,new一个User对象时传入user即可。模型驱动似乎也会遇到这个问题,以后再具体研究。

 

  

  

  

  

posted @ 2017-04-12 16:18  半缘修道半缘(君)  阅读(134)  评论(0编辑  收藏  举报