3

jquery ajaxからstruts2アクションを呼び出しています。成功すると文字列が返され、エラーが発生すると同じページにディスパッチされ、エラーが表示されます。私はそれをチェックする次のコードを使用しました。

$(document).ready(function(){
            $('#getActionRs').click(function(){
                alert("call action");
                $.ajax({
                    type:"POST",
                    url: "returnToAjax",
                    data: "firstinput=" +$('#firstinput').val()+"&secondinput=" +$('#secondinput').val(),
                    success: function(msg){
                        alert("success:"+msg);
                    }
                    });
            });
        });

上記のコードを使用して、ストラットアクションを呼び出しました。ボタンをクリックすると、このことが呼び出されます

設定ファイルでアクション要素を次のように指定しました

<action name="returnToAjax" class="example.returnToAjax">
      <result name="success" type="stream">
         <param name="contentType">text/html</param>
         <param name="inputName">inputStream</param>
      </result>
      <result name="input" type="dispatcher">/Login.jsp</result> 
    </action>

成功を返すと、文字列を正しく返します。検証xmlによってこのアクションの検証を行いましたが、エラーを返すと、Login.jspファイルコードが表示されるだけで、Login.jspにディスパッチされません。

4

2 に答える 2

1

Ajaxは、ページを更新せずにバックプロセスを実行し、ユーザーが同じページに留まるようにすることを意味します。

あなたのアプローチはAjaxプリンシパルの正しい範囲にないものです。したがって、検証に失敗した場合でも、アクションクラスコントロールはJqueryコードの同じハンドラーに戻りLogin.jsp、ビューテンプレートとしてを指定したため、Steamの結果は次のようになります。 jsp全体を選択し、そのコンテンツを返します。

同じアプローチを使用する場合は、検証に失敗した場合にアクションからアクション名を返し、JavaScriptフォーム送信機能を使用してユーザーを入力ページにリダイレクトします。

于 2012-01-11T10:45:52.980 に答える
0

あなたはこの手順に従うことができます:

  1. フォーム送信
  2. 検証エラー(validation.xmlで確認)
  3. error.jspに単語が含まれている場合、入力結果としてerror.jspを渡します。たとえば、ERRORPAGEと仮定します。
  4. ajax応答を介してerror.jspを取得します。
  5. ERRORPAGEから始まる場合は、応答コンテンツを確認し、login.jspへのjavascriptリダイレクトを実行します。

これは、ajaxを介してstruts2jqueryグリッド検証を行う例のコードスニペットです。

afterSubmit:function(response,postdata){
                  return isError(response.responseText);
                  }

<script type="text/javascript">
            function isError(text){
                if(text.indexOf('ERRORPAGE')>=0){
                    return [false,text];  //do redirection here something like
                    //window.location="/login.action";
                }
                return [true,''];
            }
        </script>
于 2012-01-11T18:00:01.633 に答える