2012-11-12 15 views
6

私はJSPでフォームを持っています。送信ボタンには「検索」と「新規追加」の2つのボタンがあります。 StrutsのActionクラスでstruts.xml1つのアクションクラスで複数の送信ボタンのシナリオでクリックされた送信ボタンを検出するにはどうすればよいですか?

<?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> 

<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> 

、我々はhttpリクエストを処理し、それが​​方法である唯一の方法があることを知っています。私の予想場合

私は検索ボタンをクリックしたときに、それはデータ検索を実行し、/example/search.jspにデータをレンダリングします、私は新しい追加]ボタンをクリックしたとき、それは/example/add.jspにリダイレクトページを実行します。ただし、両方のボタンをクリックすると、execute()メソッドに入ります。ですから、​​メソッドでクリックされたボタンを検出する方法を知る必要があります。

シナリオはあなたがstruts.xmlファイルに2つのアクションを定義し、異なるアクションhttp://struts.apache.org/docs/submit.htmlに提出するために、<s:submit>タグのaction属性を使用することができ、この

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

答えて

17

のように見えます。 JSPで

struts.xmlで
<s:submit value="Search" action="searchEmployeeAction"/> 
<s:submit value="Add New" action="addEmployeeAction"/> 

<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方法addsearchを作成します。

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

更新

あなたはaction:プレフィックスのサポートを有効にするためにtrueにstruts.mapper.action.prefix.enabled定数を設定する必要がStruts2のバージョン2.3.15.3からスタート。

あなたstruts.xmlファイルにそれを置く:

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

http://struts.apache.org/2.x/docs/multiple-submit-buttons.htmlを参照してください。 –

+0

はい....それを得ました... –

+0

@アレクサンドルM:もっと詳細な回答はできますか? struts.xml のように見えます。複数の送信ボタンの記事については、私は実際にそれを読んでいた:)。最初の1つは有望ですが、何とかうまくいきませんでした。ボタンの文字列ラベルをstrutsコントローラでブール値に変換できないようです。おそらく古いバージョンで動作するために使用されていました(私はstruts 2.3を使用しています) 。 2番目のボタンは、ボタンラベルとの緊密な結合のために、良くありません。 – null

6

モデル層では、 'ボタン' という名前Stringプロパティを定義します。両方の送信ボタンについて、nameまたはproperty属性を 'button'として指定します。したがって、あなたの​​メソッドでは、プロパティ 'button'に、対応する値が得られます。

関連する問題