6

jspにフォームがあります。[検索]ボタンと[新規追加]ボタンの2つの送信ボタンがあります。

<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]ボタンをクリックすると、ページのリダイレクトが実行されます。ただし、クリックすると両方のボタンがexecute()メソッドに入ります。そのため、メソッドでクリックされたボタンを検出する方法を知る必要があります。/example/add.jspexecute()

シナリオは次のようになります

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";
    }
}
4

2 に答える 2

17

struts.xmlファイルに2つのアクションを定義し、タグactionの属性を使用して、異なるアクションhttp://struts.apache.org/docs/submit.html<s:submit>に送信できます。

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>

そして、あなたの行動で2つのpublic Stringメソッドaddとを作成しますsearch

複数の送信ボタンについて読むhttp://struts.apache.org/docs/multiple-submit-buttons.html

アップデート

Struts2バージョン2.3.15.3以降、プレフィックスstruts.mapper.action.prefix.enabledのサポートを有効にするには、定数をtrueに設定する必要がありaction:ます。

それをあなたのstruts.xmlファイルに入れてください:

<constant name="struts.mapper.action.prefix.enabled" value="true" />
于 2012-11-12T12:47:31.467 に答える
6

モデルレイヤーで、String「button」という名前のプロパティを定義します。ここで、両方の送信ボタンについて、「ボタン」として指定nameまたはproperty属性を付けます。したがって、execute()メソッドのプロパティ'button'で、対応する値を取得します。

于 2012-11-12T12:48:36.087 に答える