如何在GET表单中管理验证并提交POST表单?

时间:2010-10-10 10:23:39

标签: spring-mvc validation

环境是Spring 3.0,具有新功能Vallidation。 我创建了一个带注释的控制器(ResetUserPasswordController),它管理HTTP.GET上的showForm和HTTP.POST上的提交表单。该功能是电子邮件请求的重置用户密码:用户先前访问另一个表单,我填写的是电子邮件地址和重新访问控件,如果重新访问是正确的,则用户会收到包含参数的链接的邮件。这两个方法(在HTTP.GET和HTTP.POST上)有两个不同的命令bean有不同的参数(我选择两个不同的bean来管理两个不同的验证器类中的验证过程)。可能你在质疑:为什么要定义两个不同的命令?我定义了以下角色:每个商务和基本(如notnull验证等)验证过程必须由支持特定命令bean的验证器类管理

我想在GET方法中创建由POST管理的命令bean的istance,但在某些测试中我意识到这可能是不正确的,如果验证过程变坏,我在输入命令上有所有错误这与我放入返回的ModelAndView中的gogin不同。

有人建议正确管理这种情况吗?

@RequestMapping(method = RequestMethod.POST)
public ModelAndView processSubmit(@Valid @ModelAttribute("command") ResetUserPasswordCommand command, BindingResult result, HttpServletRequest request, HttpServletResponse response) {
    getValidator().validate(command, result);

    if (result.hasErrors()) {
        // TODO : implements error page.
        return new ModelAndView();
    } else {
        Map<String, Object> model = new HashMap<String, Object>();

        try {
            PasswordChangeRequest passwordChangeRequest = getUserService().findPasswordChangeRequest(command.getUuid());
            getUserService().updateUserPassword(command.getUuid(), command.getPassword());
            autoLogin(request, response, passwordChangeRequest.getAccount(), command.getPassword());
        } catch (ApplicationThrowable aex) {
            return new ModelAndView("responseKO", model);
        }

        return new ModelAndView("Home", model);
    }

}

@RequestMapping(method = RequestMethod.GET)
public ModelAndView setupForm(@Valid @ModelAttribute("command") ResetUserPasswordFormCommand command, BindingResult result) {
    getFormValidator().validate(command, result);

    if (result.hasErrors()) {
        // TODO : implements error page.
        return new ModelAndView();
    } else {
        Map<String, Object> model = new HashMap<String, Object>();
        ResetUserPasswordCommand resetUserPasswordCommand = new ResetUserPasswordCommand();
        resetUserPasswordCommand.setUuid(command.getUuid());

        model.put("command", resetUserPasswordCommand);
        model.put("reCaptchaHTML", getReCaptchaService().getReCaptchaObjectNoSSL().createRecaptchaHtml(null, null));

        return new ModelAndView("user/ResetUserPassword", model);
    }
}

0 个答案:

没有答案