数据处理
1. 在servlet中,如果要获取页面提交的数据需要使用request.getParameter方法来获取,并且每次需要进行相关的类型转换工作。数据的获取及转换工作比较简单,并且是重复的操作。在struts2中提供了一种比较优秀的方式来接收和转换数据。
2. 在struts2中,如果要获取表单中的数据可以有多种方式:
a) 属性驱动方式
b) 对象驱动方式
c) 模型驱动方式。
3. 属性驱动:页面表单中表单域的名称和action的属性名一致,并且在action中提供属性的get/set方法,那么struts2会自动将数据设置到action的属性上,在处理方法中可以直接获取表单值(属性值)。为action的属性设置了get方法,那么在页面中就可以通过el表达式获取属性值。
Jsp页面
<form action="login.action" method="post"> username:<input type="text" name="username"/><br> password:<input type="password" name="password"/><br> <input type="submit" value="login"/> </form> |
Action处理类
public class UserAction { private String username; private String password; //登录处理方法 public String login(){ System.out.println("用户名:"+username+"\t密码:"+password); if("siggy".equals(username)&&"1111".equals(password)){ //登录成功 /** * Action.SUCCESS="success"; 表示action执行成功,并且需要展示页面 * Action.NONE="none";表示action执行成功,不需要视图展示页面 * Action.ERROR="error";表示action执行失败,需要一个失败页面进行展示 * Action.INPUT="input";表示如果action要执行成功,需要更多的输入信息。 * Action.LOGIN="login";表示需要用户登录方可访问 */
//return "success"; return Action.SUCCESS; } return "login"; }
public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } |
4. 对象驱动:在action类中,将对象设置为属性,并且提供get/set方法。在页面中表单域名称是action类中对象的属性名.属性。在对象的类中提供对应属性的get/set方法即可。这样在action的处理类获取的将会是对象。对象驱动的好处在于不用在处理类中 再封装对象。缺点是在jsp中表单域名称有重复的地方。
Vo类
public class User { private String name; private String pwd; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } } |
Action处理类
public class UserObjectAction { private User user; public String login(){ System.out.println("用户名:"+user.getName()+"\t密码:"+user.getPwd()); if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){ return Action.SUCCESS; } return "login"; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } } |
Jsp页面
<form action="loginObject.action" method="post"> username:<input type="text" name="user.name"/><br> password:<input type="password" name="user.pwd"/><br> <input type="submit" value="login"/> </form> |
5. 模型驱动:由于对象驱动在页面中有重复的代码,当类的属性比较多时,开发效率比较低。Struts2中提供了一种模型驱动,使得在页面的表单域名称和类的属性名一致,action处理类需要实现ModelDriven接口即可。
Jsp页面
<form action="loginModel.action" method="post"> username:<input type="text" name="name"/><br> password:<input type="password" name="pwd"/><br> <input type="submit" value="login"/> </form> |
Vo类
public class User { private String name; private String pwd; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } } |
Action处理类
public class UserModelAction implements ModelDriven<User>{ private User user; public String login(){ System.out.println("用户名:"+user.getName()+"\t密码:"+user.getPwd()); if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){ return Action.SUCCESS; } return "login"; } public User getModel() { return user = new User(); } public User getUser() { return user; }
public void setUser(User user) { this.user = user; } } |