struts2中action的传值方式

来源:互联网 发布:mac版qq接收群文件 编辑:程序博客网 时间:2024/04/27 20:54

在struts2中action的传值方式一般存在以下三种:

方法1:先看请求:
<span style="white-space:pre"></span>localhost:8888/struts/person.action?name=tom&age=22
在该请求中,存在name和age两个参数,那么只需要在相应的处理该参数的action类中定义name和age属性即可,还要相应的set和get方法:
<span style="white-space:pre"></span>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;}public  String getInfo(){System.out.println("name===="+name);System.out.println("age====="+age);return SUCCESS;}
在运行时,指定getInfo方法(默认是exectue方法)对参数进行处理,即可得到我们想要的结果。当然,我们可以更改请求的参数命名,如boyname,girlname,这是也不需要在乎在相应的action中参数的名称,但是必须保证所设的get和set方法是getBoyName和setBoyName,这是来自struts2的内部机制,在传入相应的参数时,struts2会去寻找相应的set和get方法,从而进行数据传输。

方法2:
创建一个Person类:
public class Person {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;}}
那么在对应的action处理类中应该这么写:
public class ActionPerson extends ActionSupport{private static final long serialVersionUID = 1L;private Person person ;public String getInfo(){System.out.println("name====="+person.getName());System.out.println("age======="+person.getAge());return SUCCESS ;}public Person getPerson() {return person;}public void setPerson(Person person) {this.person = person;}}
ActionPerson看上去很奇怪,因为虽然有定义了Person的对象,却看不到被初始化的过程,当然,struts2又给我们做了。不过,此时,我们在请求传输的过程中,却需要这么写:
<span style="white-space:pre"></span>localhost:8888/struts/person1.action?person.name=tom&person.age=22
在请求时,我们相当于调用了person.setName和person.setAge方法,可能是还是接触得很少,我本人还是对这种方法不是很理解,慢慢体味中。此时,我们会想,是不是我们请求的参数存在几个,我们就得写几个对象的属性呢?答案是否定的,这就涉及了另外一个内容--DTO。
(DTO data transforer object) 数据传输对象。显然,这玩意只是负责数据的传输,我们可以从另外的角度去理解这个问题,DTO就是所属的实体类加上某些动作。DTO相当于一个工具,将所传输进来的数据(有些可能是对象没有作用的)过滤掉。举个例子,我们在注册的时候,如果是实体类的话,User只需要包含name和password两个属性就可以了,但是在我们提交的时候,会存在一个密码确认,但是这个动作对user是没有作用(但是会随着请求传输进来),因此我们可以使用DTO将没用的去掉,将剩下的数据生成一个新的user对象。


3.方法3
继承ActionSupport,继承ModelDriven接口。
public class ActionPerson2 extends ActionSupport  implements  ModelDriven<Person>{private static final long serialVersionUID = 5086918296805304332L;private Person person  = new Person();public Person getModel() {return person;}public String getInfo(){System.out.println("name====="+person.getName());System.out.println("age======"+person.getAge());return SUCCESS;}}
加入泛型只是为了避免强制转换。实现ModelDriven接口只是要实现getModel抽象方法,因为该方法会返回泛型中的对象。
在请求端,使用第一次那种请求,
localhost:8888/struts/person.action?name=tom&age=22
请求的参数使用的实体类的属性值,这样,就简单地完成了请求的目的。













0 0
原创粉丝点击