3

リダイレクト後のエラー メッセージの表示に関して、非常に奇妙な問題があります。RedirectAttributes を使用して BindingResult オブジェクトとエラー メッセージをビューに渡しますが、この解決策は機能しません。

リダイレクトなしでビュー名だけを返すと、すべて正常に動作します。

誰かがアドバイスを与えることができますが、セッションの使用はありませんか?

@Controller
public class UserRegistrationController {

    @Autowired
    private UserService userService;

    @RequestMapping(value="/registration", method=RequestMethod.GET)
    public ModelAndView registrationPage() {
        ModelAndView modelAndView = new ModelAndView("user-registration/registration-form");
        modelAndView.addObject("user", new User());
        return modelAndView;
    }

    @RequestMapping(value="/registration", method=RequestMethod.POST)
    public ModelAndView registerUser(@ModelAttribute @Valid User user, 
            BindingResult result,
            final RedirectAttributes redirectAttributes) {
        ModelAndView modelAndView = new ModelAndView("redirect:registration.html");

        User tempUser = userService.get(user.getEmail());
        Map<String, String> messages = new HashMap<String, String>();

        if (tempUser == null && ! result.hasErrors()) {
            userService.save(user);
            messages.put("success", "message.user.success.register");
        } else {
            messages.put("error", "message.user.invalid.register");
            redirectAttributes.addFlashAttribute("user", user);
            redirectAttributes.addFlashAttribute("errors", result);
        }

        redirectAttributes.addFlashAttribute("messages", messages);

        return modelAndView;

    }

}

そしてビューコード:

<p>

    <c:forEach var="message" items="${messages}">
        <span class="${message.key}"><spring:message code="${message.value}" /></span><br />
    </c:forEach>

</p>

<form:form method="POST" commandName="user" action="${pageContext.request.contextPath}/registration.html">
<table>
<tbody>
    <tr>
        <td><spring:message code="user.registration.email" /></td>
        <td><form:input path="email" /></td>
        <td><form:errors cssClass="error" path="email" /></td>
    </tr>
    <tr>
        <td><spring:message code="user.registration.password" /></td>
        <td><form:password path="password" /></td>
        <td><form:errors cssClass="error" path="password" /></td>
    </tr>
    <tr>
        <td><input type="submit" /></td>
        <td></td>
        <td></td>
    </tr>
</tbody>
</table>
</form:form>
4

2 に答える 2

1

これを見たいかもしれません:

https://jira.springsource.org/browse/SPR-8968

そして、ModelAndView ではなく String を返してみてください

于 2013-06-28T18:05:54.513 に答える