0

GET 中に RequestMapping を使用して取得される JSP フォームがあります。ページの JSP ページ構造は次のようになります。

<div id="myDiv">
     <script>
        function update() {
           update_fn(formId, ... more parameters);  // this is a function defined in a .js file, this submits the form
        }
     </script>

     <form:form ... >
        <button id="myButtonUniqueIDWithCurrentTime" onclick="update()">OK</button>
     </form:form>
</div>

ボタンがクリックされると、udpate_fn() が呼び出され、$.ajax を使用して POST リクエストが送信されます。RequestMapping には、@ModelAttributeおよび で注釈が付けられたフォームが含まれてい@Validます。

BindResult にエラーがない場合は、データをデータベースにプッシュします。それ以外の場合は、同じフォームをクライアントに送り返します。これは、それがどのように見えるかです。

@RequestMapping(value = "/formSubmit", method = RequestMethod.POST)
public ModelAndView addData(
  @ModelAttribute("editForm") @Valid BackingForm form,
  BindingResult result, Model model) {

boolean success = false;
String message = "";
Map<String, Object> m = new HashMap<String, Object>();
if (form == null) {
  form = new BackingForm();
} else {
  if (result.hasErrors()) {
    success = false;
    message = "Please fix the errrors noted above";
  } else {
    try {
      MyEntity entity = form.getWrappedEntity();
      entityRepository.addData(entity);
      form = new BackingForm();    // why is empty form not visible in JSP
      success = true;
      message = "Data Successfully Added";
    } catch (EntityExistsException ex) {
      ex.printStackTrace();
      success = false;
      message = "Entity Already exists.";
    } catch (Exception ex) {
      ex.printStackTrace();
      success = false;
      message = "Internal Error. Please try again or report a Problem.";
    }
  }
}

m.put("editForm", form);
m.put("success", success);
m.put("message", message);

ModelAndView mv = new ModelAndView("editForm");
mv.addObject("model", m);

return mv;

}

これは、投稿リクエストの Javascript です。

function updateGeneric(form, resultDivId, url) {
   var data = $("#" + form.getAttribute("id")).serialize();
   $.ajax({
    type : "POST",
    url : url,
    data : data,
    success : function(response) {
      console.log(response);
      $("#" + resultDivId).replaceWith(response);
    }
   });
}

上記のコードに示すように、データが正常に追加されたら、次のことを行います。

      form = new BackingForm();    // why is empty form not visible in JSP
      success = true;
      message = "Data Successfully Added";

このフォームを ModelAndView に配置し、レンダリングされたビューを ModelAndView で返された「editForm.jsp」に置き換えると、正しいフォームがページに表示されないのはなぜですか? jspページでメッセージ、成功の正しい値を取得しています。ただし、新しいフォームに設定されている場合でも、フォームには古い送信の値が含まれています。

POST 後にリダイレクトしないことに注意してください。jqueryを使用してHTMLフラグメントを置き換えているだけです。

私のコードの何が問題なのか、同じことを行うための適切な方法を教えていただけますか?

前もって感謝します!

4

0 に答える 0