在Struts2中,假如有一个登陆页面,输入用户名密码。如何在action中接受呢?
有三种方式:1.使用Action的属性接收参数,2.使用DomainModel接收参数,3.使用ModelDriven接收参数
1.使用action的属性接受参数
只需要在处理的action中定义该私有变量(Bean),即可获取到,例如:
import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport { private String name; private String pwd; public String login(){ if ("admin".equals(name)){ if ("admin".equals(pwd)){ return SUCCESS; } } return INPUT; } // 提供get,set方法 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; } }
2.使用DomainModel接收参数
使用DomainModel时,需要把之前Action中定义的属性,提取到一个JavaBean中。
如下面的UserBean:
package com.pojo; 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中添加一个private User user;在form中的名字要与这里的user对象相同。并提供user的get,set方法。
package com.action; import com.opensymphony.xwork2.ActionSupport; import com.pojo.User; public class LoginAction extends ActionSupport { private User user; //和登录的form填写的对象相同 public String login(){ if ("han".equals(user.getName())){ if ("jun".equals(user.getPwd())){ return SUCCESS; } } return INPUT; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
form中对name需要限定传参数给哪个对象。
<form action="index_login.action" method="post"> <!-- 指定传入哪个对象的user 和pwd --> <input type="text" name="user.name"><br> <input type="text" name="user.pwd"><br> <input type="submit"><br> </form>
3.使用ModelDriven接收参数(验证输入的时候比较方便,可以重写验证的方法)
Action:
package com.action; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import com.pojo.User; public class LoginAction extends ActionSupport implements ModelDriven<User> { private User user = new User(); //和DomaiModel不同,需要实例化 public String login(){ if ("han".equals(user.getName())){ if ("jun".equals(user.getPwd())){ return SUCCESS; } } return INPUT; } // 去除了user的get,set方法 // 实现了接口的方法 // form中不需要指定哪个对象 @Override public User getModel() { return user; //返回对象 } }
UserBean与前一种相同,不变。
表单中input的name变了:
<form action="index_login.action" method="post"> <!-- 不需要 指定传入哪个对象的user 和pwd --> <input type="text" name="name"><br> <input type="text" name="pwd"><br> <input type="submit"><br> </form>
给List赋值,List<String> book;
<input type="text" name="book[0]"><input type="text" name="book[1]">,来输入数组