`
fantasy0707
  • 浏览: 36276 次
  • 性别: Icon_minigender_1
  • 来自: 兰州
社区版块
存档分类
最新评论

Struts2接收参数的几种方式

 
阅读更多
Struts2接收参数的几种方式:
1. 用Action的属性:
在action里面定义要接收的参数,并提供相应的setter,getter,可以和提交参数的名称一致,并不用做数据类型的转换。
如:
public class UserAction extends ActionSupport {
	private String password;
	pirvate String name;

  //……对应的setter,getter方法

public void execeute() {
		System.out.println(name +”:”+passowrd);
              return “success”;

}

}

相应提交方式可以用get和post,如:userAction?password=admin&name=admin
2. 使用Domain Model:
在Action里面不存很多的属性,而是用Model层用到的模型,保存它的一个对象
如:
public class UserAction extends ActionSupport {
	
	private User user;

  //……对应的setter,getter方法

public void execeute() {
   System.out.println(user.getName() +”:”+user.getPassowrd());
   return “success”;

}

}

提交参数:userAction?user.password=1&user.name=admin;这里面的user指向Action里面的user。

3. 使用DTO--数据传输对象
它的作用是接收参数,传递参数,并不是项目中的实体类。如用户注册时,会用到确认密码,所以要先把参数接收过来,做处理后,再传递给相应方法去创建User对象。
public class UserDTO {

	private String name;
	private String password;
	private String confirm;
//……对应的setter,getter方法
}

可能的Action
public class UserAction extends ActionSupport {
	
	private UserDTO  user;

  //……对应的setter,getter方法

public void execeute() {
	if(checkdate(userDTO userDTO) )//检查数据{
		newUser(UserDTO  userDTO)//创建User对象

			System.out.println(user.name +”:”+user.passowrd);

return “success”;
}
return “fail”;

}

}


提交参数的方式的Domail Model方式的相同。


4.使用ModelDriven:
在创建Action的时候,发现Action实现了ModelDriven接口,去调用 接口的getModel()方法,取到了User。
public class UserAction extends ActionSupport implements ModelDriven<User> {
	
	private User user = new User();  //这里要手动的New下

  //……对应的setter,getter方法

public void execeute() {
		System.out.println(user.name +”:”+user.passowrd);
return “success”;

}

 @Override
	public User getModel() {
	return user;
}
}

相应提交方式可以用get和post,如:userAction?password=admin&name=admin
分享到:
评论
21 楼 nongzai 2012-12-14  
。。。
execute 返回类型写错了
20 楼 mlhorizon 2010-04-13  
对于“接收参数”这个操作而言,第二个和第三个有什么区别吗?
19 楼 念不动 2010-04-13  
Struts2还是属性驱动合适一些
18 楼 tottichen 2010-04-13  
清晨阳光 写道
ModelDriven的时候,往往需要实现prepareable接口,在prepare方法里面预备数据,否则到execute方法里面,拿到的是null值

不需要吧,Struts2会自动功能OGNL的规则给你设置相应的值的。
17 楼 wukaimail 2010-04-13  
我也只是用过前两种,至于后两种方法,还没试过
我想因该还有一种:是在两个不同的Action之间跳转,传递参数。。。
16 楼 shijian0306 2010-04-13  
zhongxinhu 写道
看来我还没入门,用了这么久,都只是第一二种。



不要这么想,这种开源的东西实现的方式很多,你不一定都要会啊~
15 楼 shijian0306 2010-04-13  
lovesl 写道
不建议对Action 继承 ActionSupport



为什么不建议,讲出理由出来~
14 楼 liujiesmart 2010-04-13  
lovesl 写道
不建议对Action 继承 ActionSupport

为什么?一般常用的是什么?
13 楼 zhongxinhu 2010-04-13  
看来我还没入门,用了这么久,都只是第一二种。
12 楼 lovesl 2010-04-13  
不建议对Action 继承 ActionSupport
11 楼 fantasy0707 2010-04-13  
liujiesmart 写道
常用第二种方法,
user.username在action中不能这么用,应该user.getUsername();
才能取值

对的,我复制程序时忽略了,不好意思
10 楼 zjfcyefeng 2010-04-13  
第三、第四种用法是鸡肋
个人推荐第一、二种方法,简单实用
9 楼 清晨阳光 2010-04-13  
ModelDriven的时候,往往需要实现prepareable接口,在prepare方法里面预备数据,否则到execute方法里面,拿到的是null值
8 楼 liujiesmart 2010-04-13  
常用第二种方法,
user.username在action中不能这么用,应该user.getUsername();
才能取值
7 楼 kuchaguangjie 2010-04-13  
07年给学校做项目就用 modeldriver 了。。。
适当使用 还可以
6 楼 Clayz 2010-04-12  
能够复用model就用model,ModelDriven只处理不能加.传参数的情况,比如flex,js class attribute。dto太麻烦,参数太ugly。
5 楼 YiSingQ 2010-04-12  
推荐第三、第四种用法,相对主流一点。
4 楼 whaosoft 2010-04-12  
tottichen 写道
ModelDriven方式确实是挺实用···

好在哪里 具体给指点下
3 楼 風一樣的男子 2010-04-12  
3、4都是第一次看到
2 楼 tottichen 2010-04-12  
ModelDriven方式确实是挺实用···

相关推荐

Global site tag (gtag.js) - Google Analytics