0

私は、ユーザーが新しいフォームの送信を開始するか、以前に開始したフォームの送信を続行するかを選択できるプロジェクトに取り組んでいます。@ModelAttribute表記を使用して、新しいフォーム送信用の新しいオブジェクトを生成しています。これは非常にうまく機能します。今、私はデータベースから情報を取得して、指定されたIDに基づいてオブジェクトに情報を事前に入力しようとしていますが、問題が発生しました。@RequestParamを使用して、フォーム送信を使用して渡されたIDを取得しようとしていますが、IDがnullに戻っています。IDがリクエスト文字列の一部として送信されていることがわかりますが、@ModelAttributeメソッドに送信されていません。これが私がこれまでに持っているものです。

フォームに事前入力できるようにregIdを送信するために送信されるフォーム

<form id="preregistration" action="/Homepage/Pre-Registration" method="post">
<input type="text" name="view" id="view" value="preprocess"/>
<select name="regId" id="regId">
    <option value="0">Select</option>
    <option value="1234">1234</option>
    <option value="4567">4567</option>
</select>
<input type="submit" name="submit" id="submit" value="Submit"/>
</form>    

モデル属性メソッド

@ModelAttribute("event")
public Event createDefaultEvent(@RequestParam(required = false) Integer regId){
    log.debug("regId: {}", regId);
    if (regId == null){
        log.debug("make new event object");
        return new Event();
    } else {
        log.debug("retrieve event with id: {}", regId);
        return eventDao.get(regId);
    }
}    

マッピング方法のリクエスト

@RequestMapping(params = "view=preprocess")
public String getPreProcessInformation(@ModelAttribute("event") Event event)
    throws Exception{
        return "redirect:/preregistration.do?"+Page.EVENT.getView();
}

フォームを送信するときに、@ ModelAttruibuteメソッドでregIdがnullになる理由を誰かが理解するのを手伝ってもらえますか?前もって感謝します!

4

1 に答える 1

3

読み込みたいパラメーターの名前を伝える必要があります。

@RequestParam(value="regId", required = false)

メソッド パラメーターの名前は、実行時にリフレクションを介して利用できるものではありません。Spring は、Java コードでパラメーターに「regId」という名前を付けたことを認識できません。そのように伝える必要があります。

編集:

また、いくつかの学術的なとりとめのない、ModelAttribute メソッドは、構築しているビューの範囲内で固定されている参照データを提供するために最適に使用されます。フォーム フィールドをバインドする予定のトランザクション アイテムは、通常、実際のリクエスト ハンドラー メソッドによって生成される必要があります。OpenSession/EntityManagerInView フィルターや @SessionAttributes アノテーションを使用する場合、これは特に重要になります。

于 2011-06-01T00:43:14.920 に答える