知识大全 struts2中一个form多个提交的方法
Posted 知
篇首语:书到用时方恨少,事非经过不知难。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 struts2中一个form多个提交的方法相关的知识,希望对你有一定的参考价值。
在很多Web应用中 为了完成不同的工作 一个HTML form标签中可能有两个或多个submit按钮 如下面的代码所示
<! [if !supportLineBreakNewLine] >
< action= method= post >
<input type= submit value= 保存 />
<input type= submit value= 打印 />
</>
由于在<form>中的多个提交按钮都向一个action提交 使用Struts Action的execute方法就无法判断用户点击了哪一个提交按钮 如果大家使用过Struts x就会知道在Struts 之前的版本需要使用一个LookupDispatchAction动作来处理含有多个submit的form 但使用LookupDispatchAction动作需要访问属性文件 还需要映射 比较麻烦 从Struts 开始 加入了一个EventDispatchAction动作 这个类可以通过java 反射来调用通过request参数指定的动作(实际上只是判断某个请求参数是不存在 如果存在 就调用在action类中和这个参数同名的方法) 使用 EventDispatchAction必须将submit的name属性指定不同的值以区分每个submit 而在Struts 中将更容易实现这个功能
当然 我们也可以模拟EventDispatchAction的方法通过request获得和处理参数信息 但这样比较麻烦 在Struts 中提供了另外一种方法 使得无需要配置可以在同一个action类中执行不同的方法(默认执行的是execute方法) 使用这种方式也需要通过请求参来来指定要执行的动作 请求参数名的格式为
action!method action
注 由于Struts 只需要参数名 因此 参数值是什么都可以
下面我就给出一个实例程序来演示如何处理有多个submit的form
【第 步】实现主页面(more_submit jsp)
<%@ page language= java import= java util * pageEncoding= GBK %>
<%@ taglib prefix= s uri= /struts tags %>
<>
<head>
<title>My JSP hello jsp starting page</title>
</head>
<body>
<s:form action= submit action >
<s:textfield name= msg label= 输入内容 />
<s:submit name= save value= 保存 align= left method= save />
<s:submit name= print value= 打印 align= left method= print />
</s:form>
</body>
</>
在more_submit jsp中有两个submit 保存和打印 其中分别通过method属性指定了要调用的方法 save和print 因此 在Action类中必须要有save和print方法
【第 步】实现Action类(MoreSubmitAction)
package action;
import javax servlet *;
import opensymphony xwork ActionSupport;
import apache struts interceptor *;
public class MoreSubmitAction extends ActionSupport implements
ServletRequestAware
private String msg;
private javax servlet HttpServletRequest request;
// 获得HttpServletRequest对象
public void setServletRequest(HttpServletRequest request)
this request = request;
// 处理save submit按钮的动作
public String save() throws Exception
request setAttribute( result 成功保存[ + msg + ] );
return save ;
// 处理print submit按钮的动作
public String print() throws Exception
request setAttribute( result 成功打印[ + msg + ] );
return print ;
public String getMsg()
return msg;
public void setMsg(String msg)
this msg = msg;
上面的代码需要注意如下两点
save和print方法必须存在 否则会抛出java lang NoSuchMethodException异常
Struts Action动作中的方法和Struts x Action的execute不同 只使用Struts Action动作的execute方法无法访问request对象 因此 Struts Action类需要实现一个Struts 自带的拦截器来获得request对象 拦截器如下
apache struts interceptor ServletRequestAware
【第 步】配置Struts Action
struts xml的代码如下
<?xml version= encoding= UTF ?>
<!DOCTYPE struts PUBLIC
//Apache Sofare Foundation//DTD Struts Configuration //EN
dtd >
<struts>
<package name= demo extends= struts default >
<action name= submit class= action MoreSubmitAction >
<result name= save >
/result jsp
</result>
<result name= print >
/result jsp
</result>
</action>
</package>
</struts>
【第 步】编写结果页(result jsp) <%@ page pageEncoding= GBK %>
<>
<head>
<title>提交结果</title>
</head>
<body>
<h >$result</h >
</body>
</>
在result jsp中将在save和print方法中写到request属性中的执行结果信息取出来 并输出到客户端
启动Tomcat后 在IE中执行如下的URL来测试程序
大家也可以直接使用如下的URL来调用save和print方法
调用save方法//localhost: /moresubmit/submit!save action
调用print方法//localhost: /moresubmit/submit!print action
cha138/Article/program/Java/hx/201311/26511相关参考