action獲取表單提交數據,有三種方式:
1、根據ActionContext對象獲取;
2、利用ServletActionContext類獲取表單數據;(其實就是可以獲取HttpServletRequest對象)
3、利用接口注入的方式獲取表單數據;實現接口(ServletRequestAware)
其實以上三種方式都是action通過操作域對象來獲取數據,和servlet中操作域對象有異曲同工之妙,
I、通過ActionContext類獲取表單提交數據,代碼如下:
1 public class DogAction2 extends ActionSupport { 2 @Override 3 public String execute() throws Exception { 4 ActionContext context = ActionContext.getContext(); 5 Map<String, Object> map = context.getParameters(); 6 Set<String> set = map.keySet(); 7 for (String key : set) { 8 Object[] objects = (Object[]) map.get(key);//這里我之所以要轉化成object數組的形式,是因為表單提交數據也有可能是復選框的情況,這里要考慮周全 9 System.out.println(Arrays.toString(objects)); 10 } 11 return "success"; 12 } 13 }
II、利用ServletActionContext類,代碼如下:
1 import org.apache.struts2.ServletActionContext; 2 3 import com.opensymphony.xwork2.ActionSupport; 4 5 public class Dog3Action extends ActionSupport { 6 private static final long serialVersionUID = 1L; 7 8 @Override 9 public String execute() throws Exception { 10 HttpServletRequest request = ServletActionContext.getRequest(); 11 String username = request.getParameter("username"); 12 String password = request.getParameter("password"); 13 System.out.println(username + "---" + password); 14 return NONE; 15 } 16 }
III、利用接口(ServletActionAware)注入方式獲取表單數據,代碼如下:(利用要實現的接口中的參數來初始化request對象,進而獲取表單數據)
1 import javax.servlet.http.HttpServletRequest; 2 3 import org.apache.struts2.interceptor.ServletRequestAware; 4 5 public class Dog4Action implements ServletRequestAware { 6 private HttpServletRequest request; 7 8 @Override 9 public void setServletRequest(HttpServletRequest request) { 10 this.request = request; 11 } 12 13 public String execute() { 14 String username = request.getParameter("username"); 15 String password = request.getParameter("password"); 16 System.out.println(username + "---" + password); 17 return "none"; 18 } 19 }
總結:上面的后兩種方式都是沿襲了servlet的方式,通過域對象來獲取表單數據,第一種方式獲取的表單數據是一個map集合,進而可以進一步得到具體的數據。
接下來我會准備struts2的獲取表單數據的方式。見下一篇博客。。。
----------------------------------------------分割線--------------------------------------------------------------
說一下action和servlet的區別:
servlet:第一次請求的時候才創建,並且只創建一次;
action:每請求一次action都會創建一個action對象,每個action對象中都有一個值棧對象(只有一個) 。