Struts2接收参数的方法有3种分别是:

来源:互联网 发布:西雅图华盛顿大学 知乎 编辑:程序博客网 时间:2024/04/30 17:53

Struts2接收参数的方法有3种分别是:
 
1.用Action的属性接收参数
 
2.用DomainModel接收参数
 
3.用ModelDriven接收参数
 


一:用Action的属性接收参数的例子如下:
 
UI页面代码如下:

<body>
使用action属性接收参数<a href="user/user!add?name=credo&age=25">添加用户</a> 
</body>

 

Action代码如下:
package org.credo.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;    }}

 在相应的action中设置与将要传进来的参数名相同的变量 

    eg: 前台传给后台两个参数 name=chance & age = 1,那么后台的action中 要设定这样的变量:private String name; private int age;同时,必须设置set,和 get方法

  那么在访问action过程中,struts会自动的为action中的这两个变量设置前台传来的值

  (深度解析:

    实际上,当前台想后台的一个action发出请求的时候,struts会相应的new出来一个action对象,并调用action中的setXXX方法,注意其实action中设置的变量名 可以不和前台传来参数名向同,但setXXX,这个XXX必须与前台的参数名相同

    就这样 struts通过这个set方法将前台传来的值赋给了 action中的变量

  )

可以看到,在action种定义了name和age,并且get和set.
 
那么就可以直接进行传参,?name=credo&age=25
 
在action种将获取到这些值.
 

 

二.用DomainModel接收参数例子如下:
 

DomainModel是指域模型,就是model.最常用的一种.
 
UI代码:

<body>
使用Domain Model接收参数<a href="user/user!add?user.name=credo&user.age=25">添加用户</a>

 

Action代码:
public class UserAction extends ActionSupport {    private User user;    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;    }} DoMainModel代码: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;    }}


像上面这样就是使用dimainmodel来接收参数.
 
如果说User只有name,age,但是页面有额外的其他参数,如sex等.
 
可以使用一个VO来接收参数.
public class UserVO {
    private String name;
    private String password;
    private String confirmingPassword;

    // geter and seter methods

}

 

这里的dimainmodel就是为了公用吧.VO针对点.
 
三.用ModelDriven接收参数,不常用
 

模型驱动这种方法并不常用.
 
UI代码:
<body>
使用ModelDriven接收参数<a href="user/user!add?name=credo&age=25">添加用户</a>

Action代码:
 
注意:实现了ModelDriven.<User>,并且需要new一个User.

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() {        return user;    }}Model->User.java代码: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;    }}


实现了ModelDriven.<User>,进入action,将给新new出的User的name和age进行自动赋值.这种方法不常用.

0 0
原创粉丝点击