spring学習教程の@ModelAttribute注解運用の詳細


本論文では主にjava中@ModelAttributeの使用に関する資料を紹介します。皆さんの参考学習に供するために、詳しく紹介します。
一、@ModelAttributeコメント方法 
例(1)、(2)、(3)同様に、@ModelAttributeに注釈された方法は、ここでcontroler毎に実行されるので、一つのcontrollerに対して複数のURLをマッピングする使い方には、慎重に使用する。    
(1)@ModelAttributeコメントvoid戻り値の方法

@Controller 
public class HelloWorldController { 
  @ModelAttribute 
  public void populateModel(@RequestParam String abc, Model model) { 
   model.addAttribute("attributeName", abc); 
  } 
  @RequestMapping(value = "/helloWorld") 
  public String helloWorld() { 
   return "helloWorld"; 
  } 
} 
この例では、リクエスト/hello Worldを取得した後、poputlatemodel方法はハロルドメソッドの前に呼び出され、要求パラメータ(/hello World?abc=text)をatributeNameというmodel属性に加えて、実行後にハロルドが呼び出され、ビュー名のhello Worldとmodelに戻ります。
この例ではmodel属性名とmodel属性オブジェクトはmodel.addAttribute()で実現されていますが、Modelタイプのパラメータをメソッドに加えることが前提です。
URLやpostにサブパラメータが含まれていない場合、エラーが発生します。実はこの方法は必要なく、要求の方法を完全に書き上げることができます。このパラメータが不足しても間違いありません。

@RequestMapping(value = "/helloWorld") 
public String helloWorld(String abc) { 
   return "helloWorld"; 
} 
(2)@ModelAttributeコメントを具体的な種類に戻す方法

@ModelAttribute 
public Account addAccount(@RequestParam String number) { 
  return accountManager.findAccount(number); 
} 
 この場合、model属性の名前は指定されておらず、この方法でAcceountタイプに戻ると、このmodel属性の名前はaccountである。
この例ではmodel属性名には、戻り対象タイプが暗黙的に表示されており、model属性オブジェクトは方法の戻り値である。これは特定のパラメータを必要としない。
(3)@ModelAttribute(value=")コメントを具体的な種類に戻す方法

@Controller 
public class HelloWorldController { 
  @ModelAttribute("attributeName") 
  public String addAccount(@RequestParam String abc) { 
   return abc; 
  } 
  @RequestMapping(value = "/helloWorld") 
  public String helloWorld() { 
   return "helloWorld"; 
  } 
} 
この例では@ModelAttributeコメントのvalue属性を使用して、model属性の名前を指定します。model属性オブジェクトは方法の戻り値です。これは特定のパラメータを必要としない。
(4)@ModelAttributeと@Request Mappingは同時に一つの方法を注釈します。

@Controller 
public class HelloWorldController { 
  @RequestMapping(value = "/helloWorld.do") 
  @ModelAttribute("attributeName") 
  public String helloWorld() { 
   return "hi"; 
  } 
} 
この方法の戻り値はビュー名ではなくmodel属性の値を表し、ビュー名はRequest ToView NameTranslatorによって要求された「/hello World.do」から論理ビューhello Worldに変換される。
Model属性名は@ModelAttribute(value=")に指定されており、requestにkey=atributeNameをカプセル化したものに相当します。value=hi。
二、@ModelAttributeコメント方法のパラメータ
(1)modelから取得する    

@Controller 
public class HelloWorldController { 
  @ModelAttribute("user") 
  public User addAccount() { 
   return new User("jz","123"); 
  } 
  @RequestMapping(value = "/helloWorld") 
  public String helloWorld(@ModelAttribute("user") User user) { 
   user.setUserName("jizhou"); 
   return "helloWorld"; 
  } 
} 
この例では、@ModelAttribute("user") User user注釈方法のパラメータ、パラメータuserの値はaddAccount()方法のmodel属性に由来する。
この時、方法体に@SessionAttributes("user")と表示されていない場合、scopeはrequestとなり、表記されている場合、scopeはsessionとなります。
(2)FormフォームまたはURLパラメータから取得する(実際には、このコメントをしなくてもuserオブジェクトを取得することができます) 

@Controller 
public class HelloWorldController { 
  @RequestMapping(value = "/helloWorld") 
  public String helloWorld(@ModelAttribute User user) { 
   return "helloWorld"; 
  } 
} 
この時、このUser類にはパラメータの構造関数が必要です。
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に一定の助けをもたらすことを望んでいます。もし疑問があれば、メッセージを残して交流してください。ありがとうございます。