0

Tiles 3.0 と Spring Validator を使用しています。.../edit/{userID} のような ulr を使用してユーザーを編集し、検証エラーが発生してから、同じ URL でそのビューに戻るにはどうすればよいですか。私の問題は、エラーが表示されなかったことです。どうやってやるの?私の悪い英語でごめんなさい!

ここに私のコードがあります:

@RequestMapping(value = "/edit/{id}", method = RequestMethod.GET)
public String getEditUser(@PathVariable int id, Model model) {

    User user = userService.getUserById(id);
    model.addAttribute("user", user);
    return "user_edit";
}

@RequestMapping(value = "/edit/{id}", method = RequestMethod.POST)
public String editUser(@PathVariable int id,
        @Validated(GroupEdit.class) @ModelAttribute User user,
        BindingResult result, Model model) {

    if (result.hasErrors()){
        return "redirect:edit/" + user.getUserId();    //how can i return here?
    }
    userService.updateUser(user);
    return "redirect:edit/" + user.getUserId();
}
4

1 に答える 1

0

私は愚かな間違いを見つけました。

検証エラーが発生したときにユーザーからの入力を受け取るタイル (ビュー) に戻り、そのビューで POST メソッドに一致するようにアクション フォームを変更します。ブラウザの URL は ../user/{userId} になります。

私の見解:

<form:form action="../edit/${user.userId}" modelAttribute="user" method="post"

私のコントローラー:

@RequestMapping(value = "/edit/{id}", method = RequestMethod.GET)
public String getEditUser(@PathVariable int id, Model model) {

    User user = userService.getUserById(id);
    model.addAttribute("user", user);
    return "user_edit";   //this is my Tiles definition in tiles.xml where user input data
}

@RequestMapping(value = "/edit/{id}", method = RequestMethod.POST)
public String editUser(@PathVariable int id,
        @Validated(GroupEdit.class) @ModelAttribute User user,
        BindingResult result, Model model) {

    if (result.hasErrors()) {
        return "user_edit";   //return to the Tiles in tiles.xml, it will show error.
    }
    userService.updateUser(user);
    return "redirect:../edit/" + user.getUserId();
}
于 2014-11-25T09:31:17.180 に答える