Struts2中给开发者提供了三种接收用户输入参数的机制,我们可以根据自己项目的需求和个人习惯来选择适合自己的接收机制。
今天分别使用着三种机制来实现了一个简单的用户登录.
三种机制:
1、使用Action类中的属性接收用户输入参数
2、使用领域模型对象接收用户输入参数
3、使用Struts2独有的模型驱动接收用户输入参数
第一种是我们入门时最先接触的一种方式,很简单、也很容易接受和理解。转发时在页面获取参数
值为为:
<s:property value="username" />
第二种是我们开发项目时最为常用的,对于一个属性相对比较对的时候,如果把属性都写到Action中
那会把Acton类弄的很乱,所以属性较多的时候最好选择第二种方式来接收用户输入参数。转发时在界
面获取参数值为:
<s:property value="user.username" />
第三种方式比较特殊,它是Struts2种独有的一种接收用户输入的机制,想在项目中使用模型驱动
(ModelDriven)需要让Action实现com.opensymphony.xwork2.ModelDriven 接口,使用它
的getModel()方法来通知Struts2要注入的属性类型,并且声明属性时一定要实例化,但不需get,
set方法(这是与第二种方式的区别)。
package com.lsc.alan.action;
import com.lsc.alan.vo.User;
import com.opensymphony.xwork2.ModelDriven;
/**
* 使用模型驱动来接受用户输入,需要实现ModelDriven接口
* @author Alan
* 时间:2009年7月10日
*/
public class LoginAction3 implements ModelDriven<User>{
/** 领域模型User对象 **/
private User user = new User();
public User getModel() {
return user;
}
public String execute(){
if (user.getUsername().equals("Alan") && user.getPassword().equals("Alan")){
return "success";
} else {
return "failure";
}
}
}
转发时在界面获取参数值为:
<s:property value="username" />
个人比较倾向于第三种方式,使用模型驱动来接收用户输入参数。本来第二种方式是大家最
容易接受的,但是使用领域模型这种方式并且jsp界面使用Struts2的标签的话,就会有个问
题,我们在脚本中获取某个属性的值时属性的唯一标识“name ”的值就为:user_username,
如果配置acton的时候有命名空间的话,则“name”的值就为:nsuser_user_username,
拼起来就会很长!如果想解决这个问题,我们可以个标签唯一标识id属性。第三种方式在这方面
就处理的很好了,跟第一种方式一样,“name”就是唯一标识。