Model-Driven和Property-Driven
Struts1中我们可以将提交表单的参数使用FormBean进行封装传递给我们的Action。在struts2中我们可以使用Model-Driven和Property-Driven进行表单数据的封装,便于我们在Action中直接使用。
Property-Driven使用示例:
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>测试struts2</title> </head> <body> <form action=ceshi/User> 用户名:<input type=text name=uname /><br/> 密码:<input type=password name=pwd /><br/> <input type=submit value=登陆/> </form> </body> </html> |
package com.bjsxt.struts.test;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven;
public class UserAction extends ActionSupport{
private String uname; private String pwd;
public String execute() throws Exception { System.out.println(getUname()); return this.SUCCESS; }
public String getUname() { return uname; }
public void setUname(String uname) { this.uname = uname; }
public String getPwd() { return pwd; }
public void setPwd(String pwd) { this.pwd = pwd; } } |
package com.bjsxt.struts.test;
public class User { private int id; private String uname; private String pwd; //get和set方法省略! }
|
属性驱动时,只要保持表单域名字和Action属性名一致,即可自动进行值得填充。
Model-Driven使用示例:
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>测试struts2</title> </head> <body> <form action=ceshi/User> 用户名:<input type=text name=uname /><br/> 密码:<input type=password name=pwd /><br/> <input type=submit value=登陆/> </form> </body> </html> |
package com.bjsxt.struts.test;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven;
public class UserAction extends ActionSupport implements ModelDriven<User> {
private User user = new User();
public String execute() throws Exception { System.out.println(user.getUname()); return this.SUCCESS; }
@Override public User getModel() { return user; }
public User getUser() { return user; }
public void setUser(User user) { this.user = user; } } |
package com.bjsxt.struts.test;
public class User { private int id; private String uname; private String pwd; //限于篇幅,get和set方法省略! }
|
测试:http://localhost/teststruts/login.jsp 提交表单,发现后台正确获取输入的数据:
属性驱动和模型驱动的选取:
- 属性驱动方便简洁。表单域较少时可用。
- 表单域较多且定义了相应的pojo,可以使用模型驱动。