Myドメインオブジェクトは、JSPファイル内で明示的に参照されていない値を、同じコントローラ上のGET操作とPOST操作の間で保持しません。ここには、エラーチェックを省略したサンプルがあります。Spring MVC 3 GET操作とPOST操作の間にコマンドオブジェクト値が失われる
私はドメインオブジェクトを持っています。
class foo
{
private int fieldA;
private String fieldB;
// .. getters and setters omitted
}
コントローラ
@Controller
public class MyController
{
@Autowired
private IDaoService daoService;
@RequestMapping(value = "/display", method = RequestMethod.GET)
public String newForm(@RequestParam("id") Long id, Model model, Principal principal) throws Exception
{
// check that the user has permissions
...
// get the object
Foo foo = daoService.read(id);
// at this point foo.fieldA is equal to the input id
model.addAttribute("foo", foo);
// return the JSP path
}
@RequestMapping(value="/update", method = RequestMethod.POST)
public String update(@ModelAttribute("foo") Foo foo,
BindingResult result,
Principal principal,
Model model) throws Exception
{
// ERROR - at this point, fieldA is null
}
}
JSP
<form:form method="post" commandName="foo">
<fieldset>
<legend>Invest</legend>
<div class="fm-req">
<label for="fm-name">Field B</label>
<spring:bind path="fieldB">
<input id="fm-name" type="text" name="${status.expression}" value="${status.value}" ></input>
</spring:bind>
</div>
<div id="fm-submit" class="fm-req">
<INPUT type="submit" value="Submit" name="Submit" />
</div>
</fieldset>
</form:form>
私は、JSPはFIELDAセット(おそらくFIELDBを)持っているNEWFORMで作成されたオブジェクトを取得することを考えているだろう。ユーザーはfieldBを変更してからsubmitを押すという選択肢があります。 私は、春のドキュメントやチェック済みのWebサイトをたくさん読んだことがありますが、foo.fieldAがコントローラの更新メソッドでnullである理由がわかりません。
私がSpring MVCについて理解していることから、これは標準的なパターンのようですが、私を修正してください。
ありがとうございます。
モデルがセッション中でない場合、なぜでしょうか? –
私は、JSPがコマンドオブジェクトにアクセスできるように、newForm()へのモデル入力がセッション内のモデルであることを前提としていました。新しいモデルを作成する必要がありますか、セッションにあるモデルを入手するにはどうすればよいですか? Thx – user1132294
デフォルトでは、モデルは要求に含まれています。 –