4

私は春が初めてで、JSPビューのフォームからデータを収集し、フォームをコントローラーに送信することができました。ビューから取得したデータから、他のモデル オブジェクトも含むモデル オブジェクトをインスタンス化しています。

@RequestMapping(value = "/updateEntry", method = RequestMethod.GET)
public RedirectView updateAction(ModelAndView model,
@RequestParam(value = "name", defaultValue = "none") String selectedWaveName,
@RequestParam(value = "id", defaultValue = "-1") int id,
@RequestParam(value = "function", defaultValue = "none") String function,
@RequestParam(value = "evidence", defaultValue = "none") String evidence,
@RequestParam(value = "action", defaultValue = "none") String action,
@RequestParam(value = "topicId", defaultValue = "-1") int topicId,
@RequestParam(value = "topic", defaultValue = "none") String topic,
@RequestParam(value = "topicDesc", defaultValue = "none") String topicDesc,
@RequestParam(value = "waveId", defaultValue = "-1") int waveId,
@RequestParam(value = "waveStart", defaultValue = "none") String waveStart,
@RequestParam(value = "waveEnd", defaultValue = "none") String waveEnd)
throws ParseException {

DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
Date dateStart = formatter.parse(waveStart);;
Date dateEnd = formatter.parse(waveEnd);

waveDAO.updateFormResults(new FormResults(id, 
new Topic(topicId, topic, topicDesc), 
new Wave(waveId, selectedWaveName, dateStart, dateEnd), 
evidence, action, function));
return new RedirectView("/hr/?name=" + selectedWaveName);
}

@ModelAttribute を使用して @RequestParam 行全体をより少ない行に置き換えるにはどうすればよいですか? @ModelAttribute 注釈をモデル クラス (FormResults、Topic、Wave) に追加する必要もありますか?

ありがとう。

4

2 に答える 2

3

@ModelAttributeここではあまり必要ありません。私が通常行うこと (ただし、あなたのケースには適していない可能性があります) は、次のすべてのデータを含むオブジェクトです。

@RequestMapping(value = "/updateEntry", method = RequestMethod.GET)
public RedirectView updateAction(ModelAndView model, Options options) throws ParseException {
    ...
}

public static class Options {
    private String selectedWaveName,
    private int id,
    ...
    // Getters and setters
}
于 2012-08-30T10:26:36.430 に答える
1

ModelAttribute アノテーションは最終的に機能しました。このアノテーションを使用すると、フロント エンドから、私の場合は JSP ページから渡される変数は、宣言されている属性とまったく同じ名前を持つ必要があることがわかりました。モデル級!

たとえば、次のようなモデル クラスがあるとします。

public class FormResults {

private int id;
private Topic topic;
private Wave wave;
private String evidence;
private String action;
private String manager;
 ... }

また、すべてのクラス属性の getter メソッドと setter メソッド、およびデフォルトのコンストラクタが必要です。

JSP ページから @ModelAttribute アノテーションを使用するコントローラー メソッドに送信する変数は、次のように命名されます。

<input type="text" name="id"     ...
<input type="text" name="evidence" ...
<input type="text" name="action"   ....
<input type="text" name="manager"  ...

また、これは、属性として別のオブジェクトを持つ複雑なオブジェクトがある場合にも機能します(私の場合のように: Topic 、 Wave)。これらの入力に、クラス名のプレフィックスを付けて名前を付けるだけです: ex: topic 、 wave 、その後にそのクラス attributes 、 ex: topic.id 、 wave.id ...

そして、ここに私のコントローラーメソッドの署名があります:

@RequestMapping(value = "/updateEntry", method = RequestMethod.GET)
public ModelAndView updateAction(ModelAndView model,
        @ModelAttribute("fr") FormResults fr) throws ParseException {
...}

Spring は自動的に FormResults オブジェクトを作成します。それだけです!:)

于 2012-09-16T20:25:13.403 に答える