3

私の春のアプリケーションでは、私はこのようにやっています..

私の Jsp フォーム クリック ハイパーリンク フォームが送信されます。

<form:form action="user" modelAttribute="NAME">

   <a href="href_form1" onclick="onClick_Save()" class="save">Save</a>

</fomr:form>
<script>
  function onClick_Save() {
    $("#NAME").attr("action", $('.save').attr("href"));
    $("#NAME").submit();
     });
</script>

私のコントローラークラスでは、メソッドを書きました。

@RequestMapping(value = "href_form1", method = RequestMethod.POST)
public @ResponseBody String href_form1(UserForm userForm,Model model)throws Exception {
    //Database code here.       
    model.addAttribute("NAME", userForm);
    return "User Updated";
}

EDIT1:

WARNING: Request method 'GET' not supported

エラーページが表示されます。

HTTP Status 405 - Request method 'GET' not supported

編集:以下のようにコードを変更した後

   <script>
  $(function() {
   $('.save').on("click",function(e) {
     e.preventDefault();
     $("#NAME").attr("action", $(this).attr("href")).attr("method","POST");
     $("#NAME").submit();
   });
  });
</script>

しかし、私のフォームはコントローラーのメソッドに到達しません。

私のコードに何か問題がありますか? method="POST"フォームタグも試しました。

4

4 に答える 4

1

このようなものを試してください

<form:form action="href_form1" modelAttribute="NAME" method="POST">
  <input type="submit"/>
</form:form>

@RequestMapping(value = "href_form1", method = RequestMethod.POST)
public @ResponseBody String href_form1(UserForm userForm,Model model)throws Exception {
    //Database code here.       
    model.addAttribute("NAME", userForm);
    return "User Updated";
}

基本的には非常に単純なフォーム送信です。これが機能するようになると、フォームとコントローラーが適切にセットアップされていることがわかります。この後、アンカー タグを使用してフォームを送信する場合は、以前の提案に戻ってからpreventDefaultフォームを送信します。

お役に立てれば。

于 2013-04-20T19:53:18.173 に答える
1

エラーが発生する理由は次のとおりです

リンクのデフォルト アクションをキャンセルしないため、リンクの href をクリックするとコントローラーが呼び出されます。

したがって、コードは次のことを行います

  1. フォームのアクションをリンクの href に設定しようとします
  2. POSTを使用して上記のフォームを送信しようとします-これがあなたが達成したいことだと私は理解しています。
  3. これが成功するかどうかに関係なく、ブラウザはすぐにリンクの href に従います。これは、onclick がそのアクションを停止しない場合にリンクが行うように、GET でコントローラを呼び出そうとします。コードがフォームの POST に成功したとしても、そのリクエストは GET を実行する新しいリクエストによって強制終了されます。

私の意見では、次の可能性があります。そのうちのいくつかは、他のものよりも優れていると思われます。

非 JavaScript

  1. 保存したいものの識別を保持するパラメーターと、パラメーターごとのフォームがあります
  2. スプリング メソッドを
    method = { RequestMethod.GET, RequestMethod.POST}orに変更します
    method = RequestMethod.GET- GET を使用すると、フォームを削除して、次のリンクだけを取得できます (もちろん、スプリング コードを更新した後)。
 <a href="href_link?user=user1">Save User1</a>

あなたが望むなら

JavaScript 支援

保存したいものの識別を保持するフォームにパラメータを用意し、JavaScript でそれを設定し、MANDATORY return falseを実行するかpreventDefault 、リンクをキャンセルします。

<!-- this is an example of the rendered form -->
<form action="href_form1" id="NAME" method="POST">
  <input type="hidden" name="saveItem" id="saveItem" value="" />
</form>  

<a href="#" class="saveLink" data-save="save item 1">Save item 1</a>
<a href="#" class="saveLink" data-save="save item 2">Save item 2</a>
<a href="#" class="saveLink" data-save="save item 3">Save item 3</a>

何かを要求するのを避けるために、href にリンクがないことに注意してください

このプロセスに使用する jQuery:

$(function() {
  // assuming form ID="NAME"
  $(".saveLink").on("click",function(e) { 
     e.preventDefault(); // do not follow link
     $("#saveItem").val($(this).data("save")); // set the hidden field
     $("#NAME").submit();
  });
});

リクエストを処理するためにスプリング コントローラーが接続されていると仮定すると、おそらくもっと興味深い方法があります。

デモ

  $(function() {
   $('.save').on("click",function(e) { // passing event
     e.preventDefault(); // jQuery will normalise it for all modern browsers
     // post the href of the link to the server and return the result in a 
     // container with ID result
     $.post($(this).attr("href"), function(data) { // or $.get if you want
       $('#result').html(data);
     });
  });
于 2013-04-19T04:32:08.877 に答える
1

methodタグでを指定する必要がありますform。はい、ハイパーリンクはフォームを無視しています。actionそのため、フォームの属性を に設定しhref_form1、ハイパーリンクを送信入力に変更するか (これはあまりお勧めしません)、ハイパーリンクを変更して JavaScript 送信を行います。現時点では、リンクにセットアップがonclick あります。 href以下はベストプラクティスです。

<form:form action="href_form1" modelAttribute="NAME" method="POST">
    <input type="submit" value="Save" />

また、取得したいフォームに属性を$("#NAME")設定していないため、jQueryセレクターは何も見つけられません。id

于 2013-04-19T04:34:11.577 に答える
0

フォーム送信のデフォルトの http メソッドは GET です。POSTが必要なので、それを指定してください。うまくいきますmethod="POST"

また、コードで URL マッピングが正しく表示されません。正しいかどうかご確認いただけますでしょうか。

于 2013-04-19T04:32:18.457 に答える