私はSpring MVCでかなり新しいです。現在、私はSpring MVC Webフレームワークの機能を示すSpring MVC Showcaseを勉強しています。Spring MVCで@ModelAttributeアノテーションと@RequestAttributeアノテーションを使用することを理解する
この例では、カスタム解決可能なWeb引数の処理方法を理解するためにいくつかの問題があります。
実際には次のような状況があります。メソッドが含まれている「/データ/カスタム」
コントローラクラス:
<a id="customArg" class="textLink" href="<c:url value="/data/custom" />">Custom</a>
このリンクをクリックすると、URLへのHTTPリクエストを生成します。私のhome.jspをビューでは、私は次のリンクを持っています
@Controller
public class CustomArgumentController {
@ModelAttribute
void beforeInvokingHandlerMethod(HttpServletRequest request) {
request.setAttribute("foo", "bar");
}
@RequestMapping(value="/data/custom", method=RequestMethod.GET)
public @ResponseBody String custom(@RequestAttribute("foo") String foo) {
return "Got 'foo' request attribute value '" + foo + "'";
}
}
このHTTPリクエストを処理するメソッドは、カスタム()です:それは、この要求は、次のコードを持って処理します。したがって、前のリンクがクリックされると、HTTPリクエストはカスタムメソッドによって処理されます。
@RequestAttributeアノテーションが正確に何をするのかを理解することには問題があります。この場合、fooという名前のリクエスト属性を新しいString foo変数にバインドすると思います。しかし、この属性はどこから取られていますか?この変数はSpringによって取られていますか?
私の考えは、このリクエスト属性がHttpServletRequestオブジェクトから取得されているということです。このクラスでは、私もbeforeInvokingHandlerMethodを(持っている、ので、私は内側=バー名= fooのと値を持っていることが、この方法は属性を設定しているようですので、話すの名前を持っている方法、)そう思いますHttpServletRequestオブジェクトを呼び出すと、custom()メソッドはこの値を使用できます。
実際に私の出力は、次のとおりです。
ガット 'foo' で要求属性値 'バー'
なぜカスタム()メソッドの前に呼び出されbeforeInvokingHandlerMethod()?
そして、なぜ@ModelAttributeアノテーションで注釈されているbeforeInvokingHandlerMethod()?この場合、それはどういう意味ですか?
うーん、私はよくこのことを理解してみましょう:私は正しく「foo」という、「バー」の値を持つフォームを合格した場合@ModelAttributeアノテーションで私のbeforeInvokingHandlerMethod()メソッドは同じものであるannoteそうとき?このメソッドの中で私はrequest.setAttribute( "foo"、 "bar");を実行します。 ? – AndreaNobili
Excatly、あなたは何かを訂正しています。ModelAttributeの理解を深めるために、Spring MVC http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/webの公式文書をご覧ください。 /bind/annotation/ModelAttribute.htmlまた、http://blog.trifork.nl/2009/05/14/simple-forms-with-spring-mvc-2-5/ –
からこのドキュメントを読んだことがありましたが、私がModelAttributeアノテーションによってannotedされたメソッドを持っていると、メソッドのパラメータを名前付きモデルの属性にバインドしています。そして、他のメソッドでそれを使用することができます。メソッドを使用してRequestAttribute注釈を使用しますか? 私の場合、バインドするパラメータは何ですか? "bar"という値を持つ "foo"という名前のパラメータですか? ありがとうございます非常に親切です:-) – AndreaNobili