3

1600 行の長さのコントローラーがあります。@ModelAttributeこれには、ほとんどの場合、注釈付きの一連のパブリック メソッドが取り込まれます。また、いくつかの@RequestMapping方法があります。

行数を減らして、このクラスを分割したいと思います。@ModelAttributeアノテーションを使用して複数のパブリック メソッドをどのように処理しますか? リクエストが処理されるたびに、それらはすべて呼び出されませんか?

4

3 に答える 3

2

1600行の長さのコントローラーがあります

ゴクゴク。

@ModelAttributeアノテーションを使用して複数のパブリック メソッドをどのように処理しますか? リクエストが処理されるたびに、それらはすべて呼び出されませんか?

メソッドにアノテーションを付けるために使用される場合、このアノテーションは、実行される@RequestMappingメソッドに関係なく、そのコントローラー クラスによって実行されるすべてのリクエストに対して、メソッドの戻り値を使用してモデルを設定する必要があることを示します。

私の提案は、監査を実行して、どのビュー (JSP など) がさまざまな@ModelAttributeメソッドによって提供されるどのモデル データを使用しているかを確認することです。各ビューは、そのデータのサブセットのみを使用する可能性があります。

@ModelAttributeとメソッドのどの組み合わせがうまくいくかを理解したら@RequestMapping、それらを個々のクラスに分割します。

それがうまくいかない場合 (すべてのビューが実際にすべてのデータを使用している可能性があります)、@ModelAttributeクラスからメソッドを完全に抽出し、それらの出力を手動で結合する単一のメソッドを使用してそれらをつなぎ合わせることを検討してください (たとえば、Modelまたはメソッドからこの新しいメソッドにModelMapオブジェクトを追加し、モデルのビットをそのオブジェクトに追加します。@RequestMapping

@ModelAttribute注釈付きのメソッドは、追加のモデル データを追加するための便利な方法にすぎないことを忘れないでください。それらが唯一の方法ではありません。

于 2012-01-29T20:15:40.463 に答える
1

@ModelAttribute メソッドは void を返すこともできます。

@ModelAttribute
public void populateModel(Model model) {
    model.addAttribute("key", "value");
    // keep adding any number of attributes...
}
于 2012-02-03T18:13:09.690 に答える
0

複数の をグループ化することはできません@ModelAttributeか? たとえば、3 つの異なる選択ボックスの値を取得するための 3 つのメソッドがそれぞれ 1 つある場合、それらすべてを 1 つのメソッドに入れることができます。

于 2012-01-29T20:15:57.393 に答える