Struts2是一个优秀的MVC(Model-View-Controller)框架,其中客户端请求参数在MVC架构中作为Model的属性存在。Struts2框架有两种方式获取客户端请求的参数。
1、通过属性驱动的方式获取客户端请求的参数(将Action类作为Model的方式):
(1)将POJO类作为Action类的属性,并在Action类中提供getter/setter方法:
Action类代码如下:
public class UserAction extends ActionSupport{
private UserBean userBean;
public UserBean getUserBean() {
return userBean;
}
public void setUserBean(UserBean userBean) {
this.userBean = userBean;
}
}
其中UserBean的代码如下:
public class UserBean {
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;
}
}
jsp页面代码如下:
<form action="user.action" method="POST">
用户名:<input type="text" name="userBean.username"><br/>
密码:<input type="password" name="userBean.password"/><br/>
<input type="submit" value="提交"/>
</form>
(2)将客户端请求的参数名作为Action类的属性,并在Action类中提供getter/setter方法:
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;
}
}
jsp页面代码如下:
<form action="user.action" method="POST">
用户名:<input type="text" name="username"><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="提交"/>
</form>
(3)将客户端请求的参数封装到List集合中,作为Action类的属性,并在Action类中提供getter/setter方法:
public class UserAction extends ActionSupport{
private List<UserBean> userList;
public List<UserBean> getUserList() {
return userList;
}
public void setUserList(List<UserBean> userList) {
this.userList = userList;
}
}
jsp页面代码如下:
<form action="user.action" method="POST">
用户名1:<input type="text" name="userList[0].username"><br/>
密码1:<input type="password" name="userList[0].password"/><br/>
用户名2:<input type="text" name="userList[1].username"><br/>
密码2:<input type="password" name="userList[1].password"/><br/>
<input type="submit" value="提交"/>
</form>
(4)将客户端请求的参数封装到Map集合中,作为Action类的属性,并在Action类中提供getter/setter方法:
public class UserAction extends ActionSupport {
private Map<String, UserBean> userMap;
public Map<String, UserBean> getUserMap() {
return userMap;
}
public void setUserMap(Map<String, UserBean> userMap) {
this.userMap = userMap;
}
}
jsp页面代码如下:
<form action="user.action" method="POST">
用户名1:<input type="text" name="userMap['one'].username"><br/>
密码1:<input type="password" name="userMap['one'].password"/><br/>
用户名2:<input type="text" name="userMap['two'].username"><br/>
密码2:<input type="password" name="userMap['two'].password"/><br/>
<input type="submit" value="提交"/>
</form>
2、通过模型驱动的方式获取客户端请求的参数(将POJO类作为Model的方式):
让Action类实现com.opensymphony.xwork2.ModelDriven<T>接口,并实例化一个POJO类,将实例化的POJO类对象通过getModel方法返回。
public class User6Action extends ActionSupport implements ModelDriven<UserBean>{
private UserBean userBean = new UserBean();
public UserBean getModel() {
return userBean;
}
}
jsp页面代码如下:
<form action="user.action" method="POST">
用户名:<input type="text" name="username"><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="提交"/>
</form>
优点:解决了属性驱动存在的问题,缺点:一次只能封装一个model对象。
总结:模型驱动在开发中使用比较多,当然模型驱动也可以结合属性驱动一起使用。