0

エンティティ更新のための残りのようなメソッドを書きたいです。この場合、url からエンティティ ID を取得し、リクエスト本文からデータを取得します。問題は、ID と Bean のバインドにあります。EntityManager も Spring-Data Crud Repo もupdate(id, bean)メソッドを持っていないためです。自分で設定できるので

@RequestMapping(value = "/{id}", method = RequestMethod.POST)
public String update(@PathVariable("id") Long id, @Valid User user, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        user.setId(id);   //Very bad
        return "usersEdit";
    }
    user.setId(id);  //Bad
    repository.save(user);
    return "redirect:/users/" + id;
}

またはDRYを却下し、idをプライベートフィールドとしてフォームに入れます。他の解決策はありますか?

4

1 に答える 1

1

Spring 3.1 では、パス変数とモデル属性名が同じで、パス変数値からモデル属性をインスタンス化するコンバーターがある場合、@ModelAttribute はパス変数からインスタンス化されます。

@RequestMapping(value="/{account}", メソッド = RequestMethod.PUT)
public String update(@Valid @ModelAttribute アカウント アカウント、BindingResult 結果) {
    if (result.hasErrors()) {
        「アカウント/編集」を返します。
    }
    this.accountManager.saveOrUpdate(アカウント);
    return "redirect:../accounts";
}

完全な例は、 https ://github.com/rstoyanchev/spring-mvc-31-demo で入手できます。

于 2011-12-05T15:53:13.780 に答える