4

だから私は注釈付きのSpring MVC 3を使用しています。

3 つのフィールドを持つ単純な html フォーム (実際には ExtJS) があります。

1) Username
2) Password
3) Color

usernameというデータビーンにpassword属していますUsercolorと呼ばれる別の Bean に属しColorます。

私の UserController には、次のものがあります。

@RequestMapping(value = "/users/login", method = RequestMethod.POST)
@ResponseBody
  public String handleLogin(  @ModelAttribute("user") User paUser, 
                              @ModelAttribute("color") Color paColor, 
                              ModelMap map) {

    // at this point "paUser" contains both username AND password submitted from form

    // however, there is nothing in "paColor"

    ...

    return "user.jsp"
}   

私は何を間違っていますか?

私はSpringが初めてです。

ありがとう

4

1 に答える 1

5

通常は、フォームを表す新しいクラス (フォーム バッキング オブジェクトと呼ばれます) を作成します。たとえばUserColorForm、リクエスト ボディの各入力のプロパティを含みます。

コントローラーメソッドは次のようになります。

@RequestMapping(value = "/users/login", method = RequestMethod.POST)
@ResponseBody
public String handleLogin(UserColorForm form, ModelMap map) {
    // now you can work with form.getUsername(), form.getColor() etc.

FBO Bean にフォーム入力名と一致するプロパティ名がある場合、Spring はリクエスト内の入力をプロパティに直接バインドします。つまり、フォーム入力が の場合、username=matt&color=blueSpring はフォームの新しいインスタンスを作成し、 and を呼び出しsetUsername("matt")ますsetColor("blue")

ところで、メソッドから@ResponseBodyビューの名前を返す場合は、メソッドにアノテーションを付けたくないでしょう ( user.jsp)。@ResponseBodyメソッドの戻り値を直接応答ストリームに書き込む必要があることを意味します。

于 2012-09-13T19:10:16.037 に答える