如何检测在单个Action类中的多个提交button场景中单击的提交button?
我有一个表单中的一个jsp。 有两个提交button:“search”和“添加新的”button。
<s:form name="searchForm" action="employeeAction" method="post"> <s:textfield name="id" label="Employee ID"/> <s:textfield name="name" label="Employee Name"/> <s:submit value="Search"/> <s:submit value="Add New"/> </s:form>
在struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <default-action-ref name="index" /> <global-results> <result name="error">/error.jsp</result> </global-results> <global-exception-mappings> <exception-mapping exception="java.lang.Exception" result="error"/> </global-exception-mappings> </package> <package name="example" namespace="/example" extends="default"> <action name="employeeAction" class="example.EmployeeAction"> <result name="search">/example/search.jsp</result> <result name="add" type="redirect">/example/add.jsp</result> </action> </package> </struts>
在Struts Action类中,我们知道只有一个处理http请求的方法,那就是execute()
方法。
在我预期的情况下,当我点击searchbutton,它会执行search数据和渲染数据到/example/search.jsp
,当我点击添加button,它将执行redirect页面/example/add.jsp
。 但是,单击这两个button将进入execute()方法。 所以我需要知道如何检测execute()
方法中点击哪个button。
这个场景看起来像这样
public class EmployeeAction extends ActionSupport { public String execute() throws Exception { //PSEUDOCODE //IF (submitButton is searchButton) // return doSearch(); //ELSE IF (submitButton is addNewButton) // return doAddNew(); return SUCCESS; } public String doSearch() throws Exception { //perform search logic here return "search"; } public String doAddNew() throws Exception { return "add"; } }
您可以在struts.xml
文件中定义两个动作,并使用<s:submit>
标签的action
属性来提交不同的动作http://struts.apache.org/docs/submit.html 。
在JSP中:
<s:submit value="Search" action="searchEmployeeAction"/> <s:submit value="Add New" action="addEmployeeAction"/>
在struts.xml中:
<action name="addEmployeeAction" method="add" class="example.EmployeeAction"> <result>/example/add.jsp</result> </action> <action name="searchEmployeeAction" method="search" class="example.EmployeeAction"> <result>/example/search.jsp</result> </action>
在你的动作中创build两个public String
方法add
和search
。
阅读多个提交buttonhttp://struts.apache.org/docs/multiple-submit-buttons.html 。
更新
从Struts2版本2.3.15.3开始,您需要将struts.mapper.action.prefix.enabled常量设置为true,以启用对action:
支持action:
前缀。
把它放在你的struts.xml
文件中:
<constant name="struts.mapper.action.prefix.enabled" value="true" />
在模型图层中,定义一个名为“button”的String
属性。 现在,对于您的提交button,请将name
或property
属性指定为“button”。 所以,在你的execute()
方法中,在属性“button”中,你会得到相应的值。