struts2中action的传值方式

在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
请求的参数使用的实体类的属性值,这样,就简单地完成了请求的目的。













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值