nul*_*ull 6 java action struts2 submit-button
我在jsp中有一个表单.有两个提交按钮:"搜索"和"添加新"按钮.
<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>
Run Code Online (Sandbox Code Playgroud)
在 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>
Run Code Online (Sandbox Code Playgroud)
在Struts Action类中,我们知道只有一种方法可以处理http请求,即execute()方法.
在我预期的情况下,当我点击搜索按钮时,它将执行搜索数据并渲染数据/example/search.jsp,当我点击添加新按钮时,它将执行重定向页面/example/add.jsp.但是,单击时两个按钮都将进入execute()方法.所以我需要知道如何检测execute()方法中单击的按钮.
场景看起来像这样
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";
}
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*r M 17
您可以在struts.xml文件中定义两个操作并使用标记的action属性,<s:submit>以便提交到不同的操作http://struts.apache.org/docs/submit.html.
在JSP中:
<s:submit value="Search" action="searchEmployeeAction"/>
<s:submit value="Add New" action="addEmployeeAction"/>
Run Code Online (Sandbox Code Playgroud)
在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>
Run Code Online (Sandbox Code Playgroud)
并在您的行动中创建两个public String方法add和search.
阅读有关多个提交按钮http://struts.apache.org/docs/multiple-submit-buttons.html.
更新
从Struts2版本2.3.15.3开始,您需要将struts.mapper.action.prefix.enabledconstant 设置为true以启用对action:前缀的支持.
把它放在你的struts.xml文件中:
<constant name="struts.mapper.action.prefix.enabled" value="true" />
Run Code Online (Sandbox Code Playgroud)
在模型层中,定义String名为"button" 的属性.现在,对于两个提交按钮,指定name或property属性为"按钮".因此,在您的execute()方法中,在属性"按钮"中,您将获得相应的值.