Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation SpringBoot/MVC&使用URL参数对POST进行表单验证_Validation_Spring Mvc_Spring Boot_Thymeleaf - Fatal编程技术网

Validation SpringBoot/MVC&使用URL参数对POST进行表单验证

Validation SpringBoot/MVC&使用URL参数对POST进行表单验证,validation,spring-mvc,spring-boot,thymeleaf,Validation,Spring Mvc,Spring Boot,Thymeleaf,我有一个表格和验证工作。添加url参数时会出现问题。url参数是一个令牌,是必需的。这就是我的控制器的外观: @RequestMapping(value = "/resetpassword", method = RequestMethod.GET) public String showResetForm(ResetPassword resetPassword, Model model, @RequestParam(value = "token", required = true)

我有一个表格和验证工作。添加url参数时会出现问题。url参数是一个令牌,是必需的。这就是我的控制器的外观:

@RequestMapping(value = "/resetpassword", method = RequestMethod.GET)
public String showResetForm(ResetPassword resetPassword, Model model,
        @RequestParam(value = "token", required = true) String token,
        @RequestParam(value = "msg", required = false) String msg){     

        model.addAttribute("token", token);

    return "resetpassword";
}

@RequestMapping(value = "/resetpassword", method = RequestMethod.POST)
public String setPwd(@ModelAttribute("resetPassword") @Valid ResetPassword resetPassword,// RedirectAttributes reDirectAttr,
                     BindingResult bindingResult, Model model,
                     @RequestParam(value = "token", required = true) String token,
                     @RequestParam(value = "msg", required = false) String msg){

    if (bindingResult.hasErrors()) {
            //reDirectAttr.addFlashAttribute("org.springframework.validation.BindingResult.resetPassword",bindingResult);
            //reDirectAttr.addFlashAttribute("resetPassword",resetPassword);            
        return "resetpassword?token="+token;
    } 
    else {          
        if (token == null) {
            // TODO: no token, what to do here??
            return "redirect:/resetpassword?token=\"\"&msg=notoken";
        }
        ResetPasswordResponseDto response = super.resetUserPassword(
                resetPassword.getUname(), resetPassword.getPassword(),
                token);
        if (response.getPasswordResetResult() == PasswordResetResult.SUCCESSFUL) {
            // TODO: it worked, what now?
            return "redirect:/login";
        } else if (response.getPasswordResetResult() == PasswordResetResult.INVALID_TOKEN) {
            // TODO: bad token
            return "redirect:/resetpassword?token="+token+"&msg=badtoken";
        } else if (response.getPasswordResetResult() == PasswordResetResult.OUT_OF_POLICY_PW) {
            // TODO: out of policy pw
            return "redirect:/resetpassword?token="+token+"&msg=outofpolicy";
        } else if (response.getPasswordResetResult() == PasswordResetResult.LDAP_FAILURE) {
            // TODO: other failure
            return "redirect:/resetpassword?token="+token+"&msg=error";
        }
    }
    return "redirect:/resetpassword?token="+token+"&msg=error";
    //return new RedirectView("resetpassword?token=\"\"&msg=notoken");
}
所以我尝试了很多方法,但似乎没有任何效果。以下是我希望在请求视图时发生的情况/resetpassword?token=1232453显示视图。然后,如果表单有错误,url参数将保留在url中,表单将显示错误。现在我得到一个错误,说模板无法解析。好吧,很公平,所以我试着做了重定向

return "redirect:/resetpassword?token="+token;
这似乎是可行的,但是URL参数丢失了,视图也丢失了bindingResult错误。在代码中,我发布了我也尝试了FlashAttributes,但我只是得到一个错误,验证object='resetPassword'失败。错误计数:4是正确的,但我需要它来显示表单和我用Thymeleaf编码的错误。任何帮助或建议都会很好

我看过的资源: &

您是否尝试返回ModelAndView而不仅仅是重定向字符串?模型上的属性将作为URL查询参数提供

ModelAndView redirect = new ModelAndView("redirect:/resetpassword");
redirect.addObject("token", token);
redirect.addObject("msg", "error");
return redirect;
我最终添加model.addAttributetoken,token;对于Post请求方法,它还需要在表单上添加一个隐藏的表单字段,这对我来说很麻烦。我想我会试试你的建议。