1

現在、フィールド値の 1 つが変更されたときにフォームを送信するために、次の JavaScript を使用しています。

var url = "project/location/myAction.action?name="+ lname ; 
document.forms[0].action = url;
document.forms[0].submit();

次の Struts2 アクションを呼び出す

<action name="myAction" class="project.location.NameAction">
    <result name="success" type="tiles">myAction</result>   
</action>

次に、フォームが JavaScript から送信されたかどうかを確認する必要がexecute()ある Action クラスのメソッドに移動します。NameAction

javascriptから直接findName()メソッドを呼び出すことをお勧めします。NameActionつまり、javascript を次の jsp コードのように動作させたいと考えています。

<s:submit method="findName" key="button.clear" cssClass="submit" >
4

3 に答える 3

2

目的を達成するにはさまざまな方法がありますが、おそらくより簡単なのは、さまざまなアクションを同じアクション クラス ファイルのさまざまなメソッドにマップすることです。注釈付き:

public class NameAction {

    @Action("myAction")
    public String execute(){ ... }

    @Action("myActionFindName")
    public String findName(){ ... }

}

または XML を使用:

<action name="myAction" class="project.location.NameAction">
    <result name="success" type="tiles">myAction</result>   
</action>

<action name="myActionFindName" class="project.location.NameAction" method="findName">
    <result name="success" type="tiles">myAction</result>   
</action>

次にJavaScriptで:

var url = "project/location/myActionFindName.action?name="+ lname ;
于 2016-03-03T17:35:39.073 に答える
1

method属性を使用して、同じアクション クラスを使用して異なるメソッドをマップできます。

<action name="myAction" class="project.location.NameAction" method="findName">

デフォルトでは、method属性を省略した場合はexecuteメソッドを使用します。

このアプローチでは、アクション名を変更する必要があるため、URL を変更してアクションをマップする必要があります。異なるアクションに対して同じ URL を保持したい場合は、メソッド名をパラメーターとしてアクションに渡す必要があります。次に、メソッドの実行で、このパラメーターをメソッド名で解析し、対応するメソッドを呼び出します。

以前のバージョンでメソッドを呼び出すためにDMIが有効になっている場合、タグのmethod属性を使用できました。s:submit現在、method:パラメーター名はparams、アクション マッパーに到達したとしても、インターセプターによってブロックされます。

また、struts2 のパラメーターのリストから送信アクションを除外する方法から、他の可能性も読み取れます。

于 2016-03-03T17:13:45.473 に答える
0

完全を期すために、Andrea と Roman からのアドバイスをどのように実装したかを以下に示します。

ユーザーがfirstNamelastNameフィールドの両方にデータを入力すると、フォームの残りの部分を入力するために選択できる名前のリストが表示されます。jspは

                <div class="row">
                <div class=" col-sm-2 col-xs-12 no-padding-right text-right"><span class="required">*</span><label class="pull-right" for="lastNameId"><s:text name="lastName"></s:text>:</label></div>             
                <div class=" col-sm-2 col-xs-12 no-padding-right ">
                    <s:textfield name="lastName"  id="lastNameId" maxlength="50" onchange ="dirtyFlag();" onblur="selectNameInfo(\'newRequest\');" class="form-control"/>
                </div>
                <div class=" col-sm-2 col-xs-12 no-padding-right text-right " ><span class="required">*</span><label class="pull-right" for="firstNameId"><s:text name="firstName"></s:text>:</label></div>             
                <div class=" col-sm-2 col-xs-12 no-padding-right ">
                    <s:textfield name="firstName" id="firstNameId" maxlength="50" onchange ="dirtyFlag();" onblur="selectNameInfo(\'newRequest\');" class="form-control"/>
                </div>   
            </div>      

ジャバスクリプトは

        function selectNameInfo(formId) {
        var lastName = document.forms[0].elements["lastNameId"].value;
        var firstName = document.forms[0].elements["firstNameId"].value;

        if(lastName != "" && firstName != ""){
        clearDirtyFlag(); 
        var oldAction = document.getElementById(formId).action;
        var actionName = document.getElementById(formId).name;
        var url = oldAction.replace(actionName,actionName+"_NameSearch");
            document.forms[0].action = url;
            document.forms[0].submit();
        };
    }

actionJavaScript は、関数を呼び出すフォームの に「_NameSearch」を追加して URL を形成しselectNameInfo()ます。この場合、新しいアクションは、私の元の質問であった DMI を使用せずにアクション クラスnewRequest_NameSearchのメソッドを呼び出す次の xml に移動します。generateNameList()

    <action name="newRequest_NameSearch" class="gov.mo.dnr.egims.controller.evaluation.NewRequestAction" method = "generateNameList">           
        <result name="success" type="tiles">newRequest</result>
        <result name="nameSearch" type="tiles">selectNameInfo</result>
        <result name="error" type="tiles">error</result>            
    </action>
于 2016-03-08T21:58:37.503 に答える