(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/53138905 冷血之心的博客)
Action 中获取表单提交数据的三种方式:
(1)使用ActionContext类来获取。
(2)使用ServletActionContext类获取。
(3)使用接口注入的方式获取。
先来说说获取表单数据的直接方法:
1、在Web开发阶段,我们提交表单到Servlet里边,在Servlet里面使用request对象的方法来获取提交数据,如getParameter,getParameterMap。
2、现在我们用Action代替了Servlet,所以提交表单到了Action中,但是Action中没有request对象,所以不能直接使用request对象。
下边分别对三种方式加以阐述:
(1)使用ActionContext类来获取。
- 创建表单,提交表单数据到action中
- 在action中使用ActionContext获取数据。
代码如下:
Form1DemoAction.java
package form;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Form1DemoAction extends ActionSupport {
@Override
public String execute() throws Exception{
//获取表单数据的第一种方法:ActionContext类获取
/**
* 1、获取ActionContext对象
* 2、调用方法得到表单数据
*/
ActionContext context = ActionContext.getContext();
//key是表单输入的name属性值,value是输入的值
Map map = context.getParameters();
Set keys = map.keySet();
for(String key:keys){
Object[] obj = (Object[]) map.get(key);
System.out.println(Arrays.toString(obj));
}
return NONE;
}
}
表单form1.jsp如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
My JSP 'form1.jsp' starting page
配置文件struts.xml如下:
在web.xml设置拦截器:
Test_Struts2
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
分析:我们首先写了一个表单,提交数据指向了form1.action。在配置文件中,将form1.action指向了我们自定义的action类
Form1DemoAction。当我们访问form1.jsp并且提交了表单数据后,Form1DemoAction类中的execute()将会执行,然后就可以得
到表单提交的数据了。
(2)使用ServletActionContext类获取。
Form2DemoAction.java如下:
package form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Form2DemoAction extends ActionSupport {
@Override
public String execute() throws Exception{
//获取表单数据的第二种方法:ServletActionContext类获取
//1、使用ServletActionContext获取request对象。
HttpServletRequest request = ServletActionContext.getRequest();
//2、调用request里边的方法得到结果
String username = request.getParameter("username");
String password = request.getParameter("password");
String address = request.getParameter("address");
System.out.println(username+":"+password+":"+address);
return NONE;
}
}
其中,在struts.xml我们需要配置再一个
在表单中,我们使用如下语句指向了form2.action
action="${pageContext.request.contextPath}/form2.action"
(3)使用接口注入的方式获取。
- 让action实现接口,得到request对象
Form3DemoAction.java
package form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class Form3DemoAction extends ActionSupport implements ServletRequestAware {
private HttpServletRequest request;
@Override
public String execute() throws Exception{
//获取表单数据的第三种方法:使用接口注入方法来获取
//2、调用request里边的方法得到结果
String username = request.getParameter("username");
String password = request.getParameter("password");
String address = request.getParameter("address");
System.out.println(username+":"+password+":"+address);
return NONE;
}
@Override
public void setServletRequest(HttpServletRequest request) {
//1、得到request对象
this.request=request;
}
}
其中,在struts.xml我们需要配置再一个
在表单中,我们使用如下语句指向了form2.action
action="${pageContext.request.contextPath}/form3.action"
好了,以上就是Struts2中action获取表单数据的三种方式,其中,常用的是通过ActionContext和ServletActionContext来
获取数据。使用接口注入的方法不常用。
如果对你有帮助,记得点赞哈~欢迎大家关注我的博客,随时加群交流哦~