1

クライアント側の JSP で削除されたエントリが、リクエストがコントローラーに到達したときに再表示されるという点で、Spring MVC に問題/機能が見られます。

以下は、コントローラーでの GET リクエストのスニペットです。

AssignmentRulesFormDTO assignmentRulesFormDTO = ...
    model.addAttribute("assignmentRulesForm", assignmentRulesFormDTO);
    return new ModelAndView(getPageName(), model);

そのため、AssignmentRulesFormDTO には多数の Rule オブジェクトが含まれており、クライアント側ではこれらのオブジェクトの 1 つが削除されています。削除されたオブジェクトがサーバーに渡されていないことを Fiddler で確認しました。ただし、コントローラーの save メソッドに到達すると、オブジェクトが再表示されます。これは、save メソッドのメソッド シグネチャです。

public ModelAndView saveRuleAttributesAndRules(@ModelAttribute("assignmentRulesForm")
AssignmentRulesFormDTO assignmentRulesForm, BindingResult bindingResult, HttpSession session, Principal principal,
    ModelMap model) {

そのため、Spring がコントローラーに到達する前に何らかのマージを実行しているように見えます。

したがって、この現象は何と呼ばれ、この特定のセッション属性に対してどのようにオフにすればよいのでしょうか?

4

2 に答える 2

0

2 番目のスニペットがメソッドであると仮定すると、アノテーションで@RequestMappingタグ付けしたくないと思います。メソッド パラメーターでこのアノテーションを使用することにより、Spring に、 でアノテーションが付けられたメソッドを実行してをインスタンス化するように指示します。AssignmentRulesFormDTO@ModelAttributesAssignmentRulesFormDTO@ModelAttribute("assignmentRulesForm")

したがって、Spring が@RequestMappingメソッドにディスパッチして処理するときに行うことPOSTは次のとおりです。

  1. @RequestMapping適切な方法を見つける
  2. 各メソッド パラメータを調べて、必要なデータがそこにあるかどうかを確認します。
  3. パラメーターが見つかり、その属性がモデルにまだ存在しない場合@ModelAttributeは、その属性を設定するコントローラーでメソッドを見つけます。@ModelAttribute
  4. 3で見つけたメソッドを実行する
  5. 最後に@RequestMappingメソッドを実行します

@ModelAttributeそのため、目標がAssignmentRulesFormDTOリクエスト本文のみを入力することである場合は、パラメータに注釈を付けるべきではないようです。代わりに、おそらく使用し@RequestBodyたいでしょう。

于 2012-09-13T16:24:14.277 に答える
0

私のコントローラーには@SessionAttributes、問題の原因と思われる注釈が付けられていました。したがって、この注釈を削除すると、保存操作の送信時に新しい AssignmentRulesFormDTO が作成されました。@SessionAttributesリクエストで追加されたデータを既存のセッション属性に融合しているように見えたため、上記の問題

于 2012-09-13T20:22:10.763 に答える