使用 BindingResult 在 JSP 上显示错误消息

Posted

技术标签:

【中文标题】使用 BindingResult 在 JSP 上显示错误消息【英文标题】:Showing error message on JSP using BindingResult 【发布时间】:2014-12-30 21:26:36 【问题描述】:

我是 Spring 新手。 我正在尝试使用 BindingResult 在 jsp 上显示错误用户和密码的错误消息。但是没有显示错误消息。

请在下面的代码中提出我的错误。

JSP

<script type="text/javascript">      
    function loginUser()               
        $('#loginForm').submit();    
    

</script>

</head>

<body>
    <form:form action="login.test" id="loginForm" commandName="loginForm" method="POST">
    <div class="brand_area"></div>
        <div class="content_area">          
            <table style="top: 360px; position: relative; margin-left: 333px;">
                <tr id="uNameID">
                    <td class="label">User Name:</td>
                    <td><form:input id="userNameID" path="userName" class="textInput" /></td>
                    <td><form:errors path="userName" class="error"/></td>
                </tr>
                <tr id="pID">
                    <td class="label">Password:</td>
                    <td><form:password id="passwordID" path="password" class="textInput" /></td>
                    <td><form:errors path="password" class="error"/></td>
                </tr>
                <tr>
                    <td></td>
                    <td><span id="saveButton" class="loginButton"
                        onclick="loginUser()"> <span>Login</span>
                    </span></td>
                </tr>
            </table>
        </div>
    </form:form>

控制器

@RequestMapping(value = "login.test", method = RequestMethod.POST)
public String processForm( LoginForm loginForm, BindingResult result, ModelMap model, HttpSession session) throws SQLException 

    String resultedPage;

    model.addAttribute("l_nodes", reportService.getAllLiveNodes());
    model.addAttribute("s_nodes", reportService.getAllStaticReportNodes());

    User user = userService.getUserByName( loginForm.getUserName() );

    if( user != null )
        session.setAttribute("userID", user.getUserID());
        if( loginForm.getPassword().equals( user.getPassword() ) )


            resultedPage = "home/userHome";

        else
            result.rejectValue( "password", "login.passwordNotValid");
            resultedPage = "redirect:login.test";
        
    else
        result.rejectValue( "userName", "login.userNotValid");
        resultedPage = "redirect:login.test";
    

    return resultedPage;

谢谢

【问题讨论】:

【参考方案1】:

万一其他人研究相同... 将 hasBindErrors 标记添加到您的 JSP:

        <spring:hasBindErrors name="loginForm">
                <c:forEach var="error" items="$errors.allErrors">
                <b><spring:message message="$error" /></b>
                <br/>
                </c:forEach>
         </spring:hasBindErrors>

【讨论】:

【参考方案2】:

好吧,我通常使用 Model 对象发回值。

这个answer 可能对你有帮助。

【讨论】:

以上是关于使用 BindingResult 在 JSP 上显示错误消息的主要内容,如果未能解决你的问题,请参考以下文章

无法显示jsp页面

使用aop和BindingResult进行参数验证

在 Spring Boot 应用程序中使用 @Valid 和 BindingResult 时的表单输入验证问题

使用@Valid+BindingResult进行controller参数校验

Java使用@Valid+BindingResult进行controller参数校验

为啥 BindingResult 必须遵循 @Valid?