如何检测提交按钮在单个动作类多个提交按钮点击的情况?(How to detect submit bu

2019-06-21 03:40发布

我有一个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>

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()方法。

在我的预期的情况下,当我点击搜索按钮,它会执行搜索数据和渲染数据/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";
    }
}

Answer 1:

您可以定义在两个动作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"/>

在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的方法addsearch

阅读关于多个提交按钮http://struts.apache.org/docs/multiple-submit-buttons.html 。

更新

从Struts2的版本2.3.15.3开始,你需要设置struts.mapper.action.prefix.enabled不变,以便能够支持到真正的action:前缀。

把在你struts.xml文件:

<constant name="struts.mapper.action.prefix.enabled" value="true" />


Answer 2:

在模型层,定义一个String名为“按钮”属性。 现在,为您的提交按钮,指定nameproperty的属性为“按钮”。 所以,在你execute()方法,在财产的“按钮”,你会得到相应的价值。



文章来源: How to detect submit button clicked in multiple submit buttons scenario in single Action class?