1

私はかなり長い間このフォーラムを読んでいて、非常に役立つと思います。寄稿者に感謝します。数週間私を悩ませてきた質問があります。そして、ここに行きます。

     @RequestMapping(value="updateNote.htm",method=RequestMethod.POST)
     public String updateNote(@ModelAttribute("note")NoteBean nb, BindingResult res,Model model){
        daoobj.updateNote(nb.getName(),nb.getPath(), nb.getNote());

        model.addAttribute("note",daoobj.getByName(nb.getName()));
        return("success");
}

    @RequestMapping(value="updateNote.htm",method=RequestMethod.GET)
    public String updateNote(@ModelAttribute("note")NoteBean nb,Model model){  
        populateNoteBean();
        model.addAttribute("note",daoobj.getByName(nb.getName()));
        return("editNote");
}

@ModelAttribute("WHAT")
  public NoteBean populateNoteBean() {
    NoteBean nnb = new NoteBean();
    return nnb;
  }

メソッド populateNoteBean() では、モデル属性は「WHAT」です。でも、私が使っている名前は「note」です。したがって、コードを実行すると、NoteBean はデータベースに正しく保存されます。私の質問はどのように?? 「WHAT」という名前は「note」にするか、モデル属性が名前なしで保存しているようです。

お時間をいただきありがとうございます。

4

1 に答える 1

1

現在のコードでは、モデル内にノートビーンの 2 つのインスタンスがあります。

最初のスプリングは、コントローラー内のすべてのモデル属性アノテーション付きメソッドを呼び出し、結果をモデルに配置します。次に、requestmapping メソッドからのものを評価します。

モデル属性アノテーション付きメソッドのポイントは、Bean の作成方法を選択できることです。たとえば、データベースからロードします。

このアプローチを次のように使用します。

  • modelattr メソッド (name="note")

db から Bean をロードします

  • modelattr パラメータを使用した requestmapping メソッド (name="note")

たとえば、最初のメソッドによって作成されたノート Bean を送信からの要求パラメーターとマージし、変更されたものに直接アクセスする必要があります。

良い効果の 1 つ: エンティティをエンティティ マネージャーとマージできるようにするためだけに、すべての属性の非表示の入力フィールドをフォームに配置したくありません。このようにして、属性を 1 つだけ持つフォームを作成できます (エンティティをフェッチできるように ID 用に 1 つ追加します)。

または別のもの:ノートビーンが抽象クラスの場合、インスタンス化するものがわからないため、スプリングはビーンをインスタンス化する可能性がありません。たとえば、modelattr アノテーション付きメソッドに requestparam パラメータを追加して、何をするかを自分で決めることができます。

これは、ドキュメントで非常によく説明されています。いずれかのコントローラー、reqestmapping、または modelattribute の参照または API のいずれかであると思います。

于 2013-01-06T07:33:10.100 に答える