何@ModelAttribute春MVC?
-
26-09-2019 - |
質問
目的は何かと利用 @ModelAttribute
春MVC?
解決
@ModelAttribute
には、モデルオブジェクトのプロパティを指す(MVCにおけるM;)
それでは、私たちは「人」と呼ばれているフォームのバッキングオブジェクトでフォームを持っているとしましょう
そして、あなたは@ModelAttribute
アノテーションを使って、Spring MVCのは、コントローラのメソッドにこのオブジェクトを供給することができます:
public String processForm(@ModelAttribute("person") Person person){
person.getStuff();
}
一方注釈は、モデルの一部であるべきオブジェクトを定義するために使用されます。
:あなたがモデルで参照Personオブジェクトを持つようにしたいのであれば、あなたは次のメソッドを使用することができます@ModelAttribute("person")
public Person getPerson(){
return new Person();
}
この注釈付きメソッドは、それが自動的に春でモデルに追加されているので、あなたのビューでPersonオブジェクトへのアクセスを許可します。
を参照してください<のhref = "https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-modelattrib-method-args" のrel = "nofollowをnoreferrer ">" @ModelAttribute」に使用します。
他のヒント
私は、これは古いスレッドですけど、私は私がリングに私の帽子を投げると、私は少しより多くの水を濁っできるかどう考えた:)
私は@ModelAttribute
を理解するために私の最初の闘争は、一つに、いくつかの注釈を結合する春の決定の結果がわかりました。私はいくつかの小さな注釈に分割したら、それは明確になりました。
パラメータ注釈の場合、それは春の管理モデルから指定された名前のBeanを取得しようと@ModelAttribute
すなわち相当として@Autowired + @Qualifier
考えます。名前のBeanが見つからない場合は、代わりにエラーを投げたりnull
を返すのではなく、暗黙的に、すなわち、デフォルトコンストラクタを使用して新しいインスタンスを作成し、モデルにBeanを追加@Bean
の役割を引き受けます。
、@ModelAttribute
の等価物として@Bean + @Before
考える、すなわち、それは、モデル内のユーザーのコードによって構築豆を置き、それが常にメソッド要求処理前と呼ばれています。
比喩は、私は(文字通り、それを服用しないでください!!)以下のよう@ModelAttribute
を参照してください
@Bean("person")
@Before
public Person createPerson(){
return new Person();
}
@RequestMapping(...)
public xxx handlePersonRequest( (@Autowired @Qualifier("person") | @Bean("person")) Person person, xxx){
...
}
あなたが見ることができるようには、春は@ModelAttribute
すべての包括的な注釈を行う権利を決定しました。誰が注釈バイキングを見たい。
僕のスタイル、私は常に使用@ModelAttributeャオブジェクトから春の形jsp.例えば、デザインフォームjspのページでは、その形で存在しているのcommandName
<form:form commandName="Book" action="" methon="post">
<form:input type="text" path="title"></form:input>
</form:form>
私のオブジェクトコントローラーとフォローコード
public String controllerPost(@ModelAttribute("Book") Book book)
べてのフィールド名の書きわ路のサブ要素の形
どんどん活かしていきたいで説明してく簡単になります。ましょう。:
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
}
に記載のとおり、Spring MVC文書の @ModelAttribute 注釈で使用できる 方法 または メソッドの引数.もちろんできると同時に一つのコントローラです。
1.法ン
@ModelAttribute(“cities”)
public List<String> checkOptions(){
return new Arrays.asList(new[]{“Sofia”,”Pleven","Ruse”});//and so on
}
などを目的に方法は、追加の属性のモデルです。この例の場合 都市 キーのリスト new Arras.asList(new[]{“Sofia”,”Pleven","Ruse”})
価値としてのモデルのようなものと考えることができモデルとしてマップ(キー値). @ModelAttribute メソッドによりコントローラが呼び出される前に @RequestMapping 方法のコントローラです。
こちらしを追加したいモデルと共に用いられる情報を表示します。例えばこを埋めるように使用できるHTMLを選択:
2.メソッド引数
public String findPerson(@ModelAttriute(value="person") Person person) {
//..Some logic with person
return "person.jsp";
}
るものになるとModelAttribute手法の引数の引数から取得されます。このような場合に期待してますのモデル 人 オブジェクトとしてキーを取得したい値を入れて、メソッドの引数 人.場合などは存在しない又は(まmisspell、(value="persson"))それから春までのモデルを作る空Personオブジェクトをデフォルトするその後、リクエストパラメータとしてデータを結合している人のオブジェクトをつけられた名前が使われている。
name="Dmitrij"&countries=Lesoto&sponsor.organization="SilkRoad"&authorizedFunds=&authorizedHours=&
しておりますので名前で結合します。名前を使用setName(String name).う
//..Some logic with person
アクセスしていきます。満ちたこの名前と値"Dimitrij".
もちろん春に結合できます複雑なオブジェクトリストのような、地図、リストのセットのマップなどの後ろのシーンでのデータを結合。
していきたいで同時にモデルに注釈されたメソッド、および要求の方法ハンドラを@にModelAttributeの引数になります。し合います。
我トンの状況-@ModelAttribute方法で定義することもに、@ControllerAdviceな...
、私はパーティーに遅れています知っているが、彼らが言うように私が引用します 「より良い決してより遅くなります」。だから、私たちが行く取得してみましょう、 みんなは一例でいくつかの手順で物事を説明するための独自の方法を持って、私はそれを総括してみましょう、あなたのためにそれをシンプルにアップ。 あなたは簡単なフォームを持っていると仮定し、form.jsp
<form:form action="processForm" modelAttribute="student">
First Name : <form:input path="firstName" />
<br><br>
Last Name : <form:input path="lastName" />
<br><br>
<input type="submit" value="submit"/>
</form:form>
パス= "firstNameの" パス= "lastNameの" これらは、StudentClass内のフィールド/プロパティです フォームが呼び出されたときにそのゲッターが呼ばれているが、提出された後、そのセッターと呼ばれ、その値がmodelAttributeに示さ= formタグで「学生」された豆に設定されています。
私たちは、次のメソッドが含まれStudentControllerを持っています。
@RequestMapping("/showForm")
public String showForm(Model theModel){ //Model is used to pass data between
//controllers and views
theModel.addAttribute("student", new Student()); //attribute name, value
return "form";
}
@RequestMapping("/processForm")
public String processForm(@ModelAttribute("student") Student theStudent){
System.out.println("theStudent :"+ theStudent.getLastName());
return "form-details";
}
//@ModelAttribute("student") Student theStudent
//Spring automatically populates the object data with form data all behind the
//scenes
ついに我々は、フォーム-details.jsp
を持っています<b>Student Information</b>
${student.firstName}
${student.lastName}
だから、バック@ModelAttributeはSpring MVCのでは何の問題か? あなたのためのソースからのサンプル定義、 http://www.baeldung.com/spring-mvc-and- -modelattributeアノテーションする の@ModelAttribute のの名前付きモデル属性に結合する方法パラメータまたはメソッドの戻り値とは、Webビューにそれを公開することを注釈です。
実際に何が起こるか、それはすべてのフォームの値が、それによって提出されたものをを取得し、その後、あなたがバインドまたはオブジェクトに割り当てるためにそれらを保持しています。 これは、の の@RequestParameter のを我々は唯一のパラメータを取得し、いくつかのフィールドに値を割り当てる場所のように同じ動作します。 唯一の違いはあるの の@ModelAttribute ののすべてのフォームのデータではなく、単一のパラメータを保持しています。これは、後に開発者が使用するフォーム送信されたデータを保持しているあなたのためのBeanを作成します。
全体のことを要約すると、。 ステップ1 : リクエストが送信され、私たちの方法ShowFormを実行され、モデルは、一時的な豆は、名前の学生がフォームに転送されると設定されています。 のtheModel.addAttribute( "学生"、新学生()); のの
ステップ2: のmodelAttribute = "学生" のの フォーム送信モデルに学生を変更し、今では、フォームのすべてのパラメータを保持している。
ステップ3: の@ModelAttribute( "学生")学生theStudent のの 私たちの の@ModelAttribute ののことでホールドされた値を取得し、学生への全体豆/オブジェクトを割り当てます。
ステップ4: そして、私たちはちょうど私が行ったように、ページなどでそれを示すように、入札としてそれを使用する
私はそれが概念を理解するのに役立ちます願っています。おかげ
受webアプリであるか否かのGmailメールまたはFacebookやInstagramやその他のwebアプリケーションでデータ交換や情報との間にエンドユーザーのアプリケーションや、UIの願います。でもSpring MVC世界には二つの方法が用意されてい交流データ
- コントローラからのUI、
- のUIコントローラ部でします。
私の興味のある方はこちらかのデータは通知からのUIコントローラです。してから行うこともでき、2通りの方法:
- 利用のHTML形式
- 利用のクエリパラメータ。
を用いたHTML形式:考え、以下のシナリオでは、
きのフォームの送信データから、webブラウザをアクセスできるデータコントローラのクラスとしてオブジェクトです。が書"を提出し、HTML形式のコンテナなしてもらうこととなる。.では、
- 最初の読みのすべてのデータの提出を取り扱いしておりますの請求に ます。getParameter 方法。
- 一度に読み込みしましては、適切なJava typeを使用 整数となります。parseInt, ダブル。parseDouble その他全ての構文解析方法をご利用のデータ型のデータです。
- 一度に解析され、オブジェクトのモデルクラスを作成します。例えば、このシナリオでは、ユーザー情報が記載されており、またクラスを作成するというユーザーのコンテナのオブジェクトの作成と設定すべての値が自動的に入るとオブジェクトです。
- その後引渡しそのオブジェクト設定の値をコントローラ部でします。
ことも仕事をしている。
まず定義モデルクラスのように、ユーザーの数の分野の完全一致が必要ィールドの数をHTML形式です。また、名前に使用するHTMLのフォームを一致させる必要があの名前としては、Javaのクラスです。これは非常に重要です。名前を一致させる必要があり、多くの分野の形成を一致させる必要がある分野のクラスとまっています。一度そのために、コンテナで自動的にデータを読み込みを取り扱いしております、オブジェクトのモデルを設定しますので手でコントローラ部でします。読みている場合は、それらの数値のコントローラを利用していま @ModelAttribute アノテーションの方法でパラメータ。私の作成方法をコントローラを用い、@ModelAttributeに追加パラメータで自動的にこのオブジェクトによる容器。
この例のコードを登録するユーザー:
@RequestMapping(value = "registerUser", method = RequestMethod.POST)
public String registerUser(@ModelAttribute("user") User user, ModelMap model) {
model.addAttribute("user", user);
return "regResult";
}
これは絵を説明した。
これは春のMVC
で目的のデータバインディングのために使用されています。あなたはそれでフォーム要素を持つJSPを持ってみましょう例えば
JSP
の
<form:form action="test-example" method="POST" commandName="testModelAttribute"> </form:form>
(春フォームメソッド、単純なフォーム要素を使用することもできる)
上のコントローラサイド
@RequestMapping(value = "/test-example", method = RequestMethod.POST)
public ModelAndView testExample(@ModelAttribute("testModelAttribute") TestModel testModel, Map<String, Object> map,...) {
}
フォームを提出する際に今すぐフォームフィールドの値があなたに利用できるようになります。
注釈のWebビューにさらされるという名前のモデル属性に結合する方法パラメータまたはメソッドの戻り値は、その。
public String add(@ModelAttribute("specified") Model model) {
...
}
@ModelAttributeは、メソッドの引数/パラメータとして、またはメソッド宣言の前に使用することができます。 この注釈の主な目的は、モデルオブジェクトに要求パラメータまたはフォームフィールドを結合する
@ModelAttribute
はあなたがテストは、あなたがさらに検索のためのJSPページ上でそれを使用することができるようにモデルで利用できるようになります豆とテストへの参照である豆テストされ、与えられた例では(@ModelAttribute("Testing") Test test) as Testing
で指定された名前を持つ属性を作成します。あなたはあなたの中に保存されたことを値のModelAttribute
ます。
@ModelAttributeは、単にコントローラクラスで私たちのロジックを実行するためのPOJO calssにJSPフィールドから値をバインドします。あなたが支柱に精通している場合、これは提出時にフォームBeanオブジェクトを取り込むようなものです。
ModelAttribute注釈は、スプリングMVC Webアプリケーションの一部として使用され、2つのシナリオで使用することができる。
はまず第一に、プレJSP負荷モデルにデータを注入するために使用することができます。これは、JSPは、すべてのデータ自体を表示するために必要であることを保証することに特に有用です。注射は、モデルに一つの方法を接続することによって得られる。
第二に、既存のモデルからのデータを読み取り、コーチのメソッドのパラメータに割り当てるために使用することができます。
refrence https://dzone.com/articles/using-春-MVC%E2%で、80%の99S の