一、基本操作:
1.ActionContext方式:写在Action中
首先ActionContext调用静态getContext()方法,获得Context对象,Context调用getParameter()方法,返回一个Map类型的值。通过遍历Map,获得表单数据。
public String execute() throws Exception {
ActionContext context = ActionContext.getContext();
Map<String,Parameter> parameters = context.getParameters();
Set<String> key = parameters.keySet();
for(String keys:key) {
System.out.println(parameters.get(keys));
}
return NONE;
}
2.使用ServletActionContext类:(这种方法最简单,最常用)
ServletActionContext调用getRequest()方法,直接获得Request对象,然后就和servlet中的操作一样。
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
String username = request.getParameter("username");
String password = request.getParameter("password");
return NONE;
}
3.实现ServletRequestAware类:
通过实现ServletRequestAware类,申明一个HttpServletRequest变量request,通过setServletRequest()方法注入。
private HttpServletRequest request;
@Override
public void setServletRequest(HttpServletRequest request) {
// TODO Auto-generated method stub
this.request = request;
}
public String execute() throws Exception{
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("username:"+username+",password:"+password);
return NONE;
}
二、使用封装技术来操作表单数据:
1.属性封装:在action类中定义成员变量,名称和表单中属性名称一模一样。同时在action类中为成员变量设置set方法即可。
jsp文件:
<form action="${pageContext.request.contextPath}/form01" method="post">
Username:<input type="text" name="username"><br/>
Password:<input type="text" name="password"><br/>
<input type="submit" value="提交">
action类:
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;
}
@Override
public String execute() throws Exception {
System.out.println("username:"+username+",password:"+password);
return NONE;
}
}
2.使用模型驱动封装操作操作表单:
Action类实现一个名为ModelDriven类,并且需要将表单属性封装成javaBean,比如User类,定义User类的变量
public class ActionForm02 extends ActionSupport implements ModelDriven<User>{
private User user = new User();
@Override
public User getModel() {
return user;
}
@Override
public String execute() throws Exception {
System.out.println(user);
return NONE;
}
}
User类:
package com.fxy.struts.form;
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;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
}
}
使用封装属性和驱动模型封装的方法时需要注意不能对同一个表单同时使用这两种方法,如果同时使用将采用驱动模型封装的方法。
3.表达式封装:在Action类中声明一个实体类,并且为这个实体类生成set和get方法,在表单name中改写。jsp中user由于action类中设置了setUser和getUser从而获得user对象,然后user.username和user.password将username和password通过User类中的Set方法设置进去。
Action类:
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
System.out.println(user);
return NONE;
}
User类:
package com.fxy.struts.form;
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;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
}
}
jsp:
<form action="${pageContext.request.contextPath}/form03" method="post">
Username:<input type="text" name="user.username"><br/>
Password:<input type="text" name="user.password"><br/>
<input type="submit" value="提交">
表达式封装可以获得不同对象的属性值,而模型驱动只能获取同一个对象的值。
4.将表单数据封装到List集合和Map集合:步骤和上面的表达式步骤相同。
list操作:
Action类:
private List<User> list;
public List<User> getList() {
return list;
}
public void setList(List<User> list) {
this.list = list;
}
@Override
public String execute() throws Exception {
System.out.println(list);
return NONE;
}
jsp文件:
<form action="${pageContext.request.contextPath}/form04" method="post">
<!-- 这里的list[0]代表第一个list集合 -->
Username:<input type="text" name="list[0].username"><br/>
Password:<input type="text" name="list[0].password"><br/>
Username:<input type="text" name="list[1].username"><br/>
Password:<input type="text" name="list[1].password"><br/>
<input type="submit" value="提交">
</form>
Map操作:
action:
private Map<String, User> map;
public Map<String, User> getMap() {
return map;
}
public void setMap(Map<String, User> map) {
this.map = map;
}
@Override
public String execute() throws Exception {
System.out.println(map);
return NONE;
}
jsp:
<form action="${pageContext.request.contextPath}/form05" method="post">
<!-- 这里的map['fxy']设置的是map的key值-->
Username:<input type="text" name="map['one'].username"><br/>
Password:<input type="text" name="map['one'].password"><br/>
Username:<input type="text" name="map['fxy'].username"><br/>
Password:<input type="text" name="map['fxy'].password"><br/>
<input type="submit" value="提交">
</form>