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
Redirect SpringMVC:重定向后显示验证消息_Redirect_Spring Mvc - Fatal编程技术网

Redirect SpringMVC:重定向后显示验证消息

Redirect SpringMVC:重定向后显示验证消息,redirect,spring-mvc,Redirect,Spring Mvc,我在重定向后显示错误消息时遇到了一些非常奇怪的问题。我使用RedirectAttributes将带有错误消息的BindingResult对象传递给视图,但此解决方案不起作用 当我只返回一个没有重定向的视图名称时,一切正常 有人能给出建议,但不使用会话吗 @Controller public class UserRegistrationController { @Autowired private UserService userService; @RequestMap

我在重定向后显示错误消息时遇到了一些非常奇怪的问题。我使用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;

    }

}
@控制器
公共类UserRegistrationController{
@自动连线
私人用户服务;
@RequestMapping(value=“/registration”,method=RequestMethod.GET)
公共模型和视图注册页(){
ModelAndView ModelAndView=新的ModelAndView(“用户注册/登记表”);
addObject(“用户”,新用户());
返回模型和视图;
}
@RequestMapping(value=“/registration”,method=RequestMethod.POST)
公共模型和视图注册器(@modeldattribute@Valid User,
绑定结果结果,
最终重定向属性(重定向属性){
ModelAndView ModelAndView=newmodelandview(“重定向:registration.html”);
User tempUser=userService.get(User.getEmail());
映射消息=新的HashMap();
if(tempUser==null&&!result.hasErrors()){
userService.save(用户);
messages.put(“success”、“message.user.success.register”);
}否则{
messages.put(“错误”,“message.user.invalid.register”);
redirectAttributes.addFlashAttribute(“用户”,user);
redirectAttributes.addFlashAttribute(“错误”,结果);
}
redirectAttributes.addFlashAttribute(“消息”,消息);
返回模型和视图;
}
}
以及查看代码:

<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>



您可能想看看这个:


尝试返回一个字符串而不是ModelAndView

当错误仍然存在于同一页面上且仅在成功重定向时,应该没有理由重定向。重定向的原因与确保浏览器在使用“后退”按钮时不会尝试重复相同的表单提交有关,但当输入无效时,最简单的方法是保持在同一页面上

另一个想法,可能是因为您在GET映射中将ModelAndView设置为一个新对象,从而覆盖您传入的重定向flash变量?可能传入模型并查看重定向flash变量是否存在:“publicmodelandview registrationPage(model model){…”关于jira的链接:我使用3.2.3版本的Spring