English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

javaの@ModelAttributeアノテーションの役割

問題点:フォームで値を送信する際に、name、address、ageなどの属性が定義されている場合、フォームを通じて送信される値はこれらの属性のみです3の属性がありますが、私たちが必要なname、pass、address、ageなどの4つの属性です。そのため、フォームを提出して値を割り当てるときに、取得できなかった値がnullになる場合があります。以下の図を参照してください:

取得したpassはnullです

この問題を解決するために、@ModelAttributeアノテーションを使用する必要があります:

以下に実装コードを示します:

 @ModelAttribute
 public void getUsers(@RequestParam(value="name",required=false) String name,Map<String, Object> map){
  if(name!=null){
   System.out.println("ModelAttributeの呼び出し");
   //データベースから取得したオブジェクトのシミュレーション。
   User users = new User("cjh","123","[email protected]","China");
   System.out.println("データベースからオブジェクトを取得中"+users);
   map.put("user", users);
  }
 }
 @RequestMapping("/getInfo")
 public String getServletAPI(User user){
  String viewName = "hello";
  System.out.println("変更:"+user);
  return viewName;
 }

@ModelAttributeアノテーションメソッドは、このコントローラ内で他のどのメソッドが呼び出されようとも、常に実行されます。

上記のコードの実行プロセスは以下の通りです:

1.まず、@ModelAttributeアノテーション装飾されたメソッドを実行し、データベースから変更する必要があるオブジェクトを検出し、値をmapのキー値ペアに置きます。keyは、リクエスト処理メソッドに渡されるパラメータ名と同じでなければなりません。例えば:ここで定義された引数名がuserの場合、map.put(“user”, 値(データベースから検索されたオブジェクト))。このMapはメソッドの引数の部分に定義する必要があります(上記のコードのようになります)。

2.Spring MVCは、Mapからuserオブジェクトを検出し、フォームリクエストパラメータをそのuserオブジェクトに割り当てます。フォームで定義された属性のみが置き換えられ、定義されていないものはnullであり、変更されません。したがって、@ModelAttribute装飾されたメソッド内で定義されたキーの名前は、コントローラーメソッド(@RequestMapping()装飾されたメソッド)の引数の名前と一致する必要があります。それがなければ効果がありません。

3.Spring MVCは、上記のオブジェクトをターゲットメソッドの引数として渡します。

注意:@ModelAttribute 装飾されたメソッド内に、mapに格納する際のキーは、ターゲットメソッドの引数の型のパラメータ名と一致する必要があります。

最終的な効果:

これでこの記事はすべて終わりです。この記事の内容が皆様の学習や仕事に少しでも役立つことを願っています。また、ナイアラ・チュートリアルのサポートもお願いします!

声明:この記事の内容はインターネットから取得しており、著作権者所有、インターネットユーザーが自発的に貢献し、自己でアップロードしたものであり、このサイトは所有権を持ちません。また、人工的な編集は行われておらず、関連する法的責任も負いません。著作権侵害を疑う内容が見つかった場合は、以下のメールアドレスまでご連絡ください:notice#oldtoolbag.com(メールを送信する際、#を@に変更してください。報告を行い、関連する証拠を提供してください。一旦確認ができたら、このサイトは即座に侵害を疑う内容を削除します。)