如何检测在单个 Action 类中的多个提交按钮场景中单击的提交按钮? [英] How to detect submit button clicked in multiple submit buttons scenario in single Action class?
问题描述
我在jsp中有一个表单.有两个提交按钮:搜索"和添加新"按钮.
I have a form in a jsp. There are two submit buttons: "Search" and "Add New" 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()
方法.
In Struts Action class, we know that there is only one method that processing http request, that is execute()
method.
在我预期的情况下,当我点击搜索按钮时,它会执行搜索数据并将数据呈现到/example/search.jsp
,当我点击添加新按钮,它将执行重定向页面到/example/add.jsp
.但是,两个按钮在被点击时都会进入 execute() 方法.所以我需要知道如何检测在 execute()
方法中点击了哪个按钮.
In my expected case, when I clicked Search button, it will perform searching data and render data to /example/search.jsp
, when I clicked Add New button, it will perform redirecting page to /example/add.jsp
. However, both buttons when clicked will go into execute() method. So I need to know how to detect which button clicked in the execute()
method.
场景是这样的
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
文件中定义两个动作,并使用
标签的 action
属性来提交不同的动作 http://struts.apache.org/docs/submit.html.
You can define two actions in struts.xml
file and use action
attribute of <s:submit>
tag in order to submit to different actions http://struts.apache.org/docs/submit.html.
在 JSP 中:
<s:submit value="Search" action="searchEmployeeAction"/>
<s:submit value="Add New" action="addEmployeeAction"/>
在 struts.xml 中:
In 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>
并在您的操作中创建两个 public String
方法 add
和 search
.
And in your action create two public String
methods add
and search
.
阅读多个提交按钮http://struts.apache.org/docs/multiple-submit-buttons.html.
更新
从 Struts2 版本 2.3.15.3 开始,您需要将 struts.mapper.action.prefix.enabled
常量设置为 true 以启用对 action:
前缀的支持.
Starting from Struts2 version 2.3.15.3 you need to set struts.mapper.action.prefix.enabled
constant to true in order to enable support for action:
prefix.
把它放在你的 struts.xml
文件中:
Put that in your struts.xml
file:
<constant name="struts.mapper.action.prefix.enabled" value="true" />
这篇关于如何检测在单个 Action 类中的多个提交按钮场景中单击的提交按钮?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!