请求数据的自动封装
三种方法:
1.OGNL方式
2.拦截器params
3.action实现ModelDriven<T>接口
方法一:1.OGNL方式
1.创建数据实体类
public class User {
private String userName;
private String passWord;
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;
}
}
2.创建Action类进行数据的读取
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private User user;
//get()和set()方法不能偷懒得都写上,不然会出现获取不到信息的尴尬局面~切记
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
public String login() {
System.out.println("用户名"+user.getUserName());
System.out.println("密码"+user.getPassWord());
return "login";
}
}
3.登录界面,进行数据的输入
<body>
<form action="${pageContext.request.contextPath}/login" name="frmlogin" method="post">
用户名:<input type="text" name="user.userName"/><br>
密 码:<input type="text" name="user.passWord"/><br>
<input type="submit" value="提交"><br>
</form>
</body>
运行结果:
小贴士:我们通过user.userName这种方式获取值其实就是使用了ognl表达式,
就是往根(root,值栈valueStack)中存放值,而值栈中的栈顶元素也就是为当前action,我们在action中设置user的get、set属性,即可以让存进来的值匹配到,进而将对应属性赋值成功。
方法二:拦截器params
1.当我们直接在action中封装实体的时候,我们可以直接获取值,不用通过bean对象
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private String userName;
private String passWord;
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;
}
public String login() {
System.out.println("用户名"+userName);
System.out.println("密码"+passWord);
return "login";
}
}
2.登录界面name属性值必须和实体属性值一致
<body>
<form action="${pageContext.request.contextPath}/login" name="frmlogin" method="post">
用户名:<input type="text" name="userName"/><br>
密码:<input type="text" name="passWord"/><br>
<input type="submit" value="提交"><br>
</form>
</body>
运行结果:
小贴士:我们之所以能够直接获取,是因为拦截器params自动帮我们拦截匹配了
方法三:action实现ModelDriven<T>接口
1.同样的我们需要一个实体类user
public class User {
private String userName;
private String passWord;
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;
}
}
2.创建一个活动类同时实现ModelDriven<T>接口
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class MyDateTest extends ActionSupport implements ModelDriven<User>{
private User user=new User();
public User getModel() { //必须重写getModel方法,并且将实体对象作为返回值
return user;
}
public String login(){
System.out.println("用户名:"+user.getUserName());
System.out.println("密码:"+user.getPassWord());
return "success";
}
}
3.登录界面进行数据提交
<body>
<form action="${pageContext.request.contextPath}/login" name="frmlogin" method="post">
用户名:<input type="text" name="userName"/><br>
密码:<input type="text" name="passWord"/><br>
<input type="submit" value="提交"><br>
</form>
</body>
运行结果: