私のjspでは、スプリングフォームタグを使用してデータをバインドおよび更新しています。
私のシナリオは、ユーザーがページに入ったときにデフォルト値を表示することです。これらのデフォルト値は、いくつかの条件に応じてデータベースから取得する必要があります。しかし、ユーザーがデータを編集して送信するときは、デフォルト値を更新せずにデータベースに保存したいと思います。
どんな提案でも大歓迎です!
フォームページへの標準的なアプローチは、GET用とPOST用の2つのメソッドを持つコントローラーを使用することです。フォームにバインドするオブジェクトも必要です。
GETを処理するメソッドは、バインドオブジェクトを設定してモデルに配置し、フォームページのビューを返します。ここでのバインドオブジェクトは、どこからでも取得できるデフォルト値で作成できます。バインドオブジェクトには、おそらくIDなどのキーがあります。デフォルトのものはゼロ/デフォルトキーを持つことができます。
POSTを処理するメソッドは、バインドオブジェクトをパラメーターとして受け取ります。おそらく値を検証してからデータベースに挿入します。データベースがキー/IDを生成する可能性があります。
これが例です。
@Controller
public class PersonController {
@RequestMapping(value="/person.do", method=RequestMethod.GET)
public ModelAndView setup() {
ModelAndView response = new ModelAndView("person");
//Create default bind object, can get values
//from database if you like. Here they're just
//hard coded.
Person person = new Person();
person.setName("Joe Bloggs");
response.addObject("person", person);
return response;
}
@RequestMapping(value="/person.do", method=RequestMethod.POST)
public ModelAndView post(@ModelAttribute("person") Person person,
BindingResult result) {
Validator.validate(person, result);
if (result.hasErrors()) {
ModelAndView response = new ModelAndView("person");
response.addObject("person", person);
return response;
} else {
personDao.store(person);
}
return new ModelAndView("redirect:nextPage.do");
}
}
フォームには、バッキングオブジェクトで指定した値が入力されます。あなたの質問の2番目の部分がわかりません。