由于 Spring MVC 中不存在 URL,验证表单提交按钮在第二次尝试后返回 404

Posted

技术标签:

【中文标题】由于 Spring MVC 中不存在 URL,验证表单提交按钮在第二次尝试后返回 404【英文标题】:Validation Form submit button returns 404 after second try because of not existing URL in Spring MVC 【发布时间】:2018-03-20 11:38:00 【问题描述】:

我在 Spring - MVC 中遇到了表单验证问题。首先,我有这个 .jsp 页面,其中要求提交表单,要求输入用户名和密码。

请输入您的凭据以登录

<form:form method="POST" commandName="user" action="user/doLogin">
    <form:errors path="*" cssClass="errorblock" element="div" />
    <table>
        <tr>
            <td>User Name :</td>
            <td><form:input path="name" /></td>
            <td><form:errors path="name" cssClass="error" /></td>
        </tr>
        <tr>
            <td>User Password :</td>
            <td><form:password path="password" /></td>
            <td><form:errors path="password" cssClass="error" /></td>
        </tr>
        <tr>
            <td colspan="3"><input type="submit" /></td>
        </tr>
    </table>
</form:form>

这个表单背后的控制器是 LoginController.java

@控制器

@RequestMapping("/user")
    public class LoginController  

    @RequestMapping(value = "/doLogin")
    public String doLogin(@Valid User user, BindingResult result, ModelMap model) 


        if (result.hasErrors()) 
            return "user";
         else 
            model.addAttribute("name", user.getName());

            return "Done";
        


    @RequestMapping(method = RequestMethod.GET)
    public String displayUserForm(ModelMap model) 

        model.addAttribute("user", new User());
        return "user";

    


    

在我的模型包中,我有我使用的用户对象

org.hibernate.validator.constraints.NotEmpty;
org.hibernate.validator.constraints.Range;

用于验证目的。

验证工作完美,但问题是,每当我在表单中输入错误的凭据并收到相应的消息时,下一次提交凭据时,由于第二次调用提交按钮后的 URL 错误,我会收到 404 错误和doLogin() 函数(用户/用户/doLogin)。我应该怎么做才能使其正常工作?在此先感谢您的任何信息 ! :)

【问题讨论】:

【参考方案1】:

使用modelAttribute="users" 代替commandName="user"

您也缺少第二个请求的值,如果未指定值,则无法调用此方法。

@RequestMapping(value="?" , method = RequestMethod.GET)
    public String displayUserForm(ModelMap model) 

        model.addAttribute("user", new User());
        return "user";

    

【讨论】:

以上是关于由于 Spring MVC 中不存在 URL,验证表单提交按钮在第二次尝试后返回 404的主要内容,如果未能解决你的问题,请参考以下文章

远程验证在 ASP.NET MVC 5 中不起作用

多个领域来处理 Spring MVC 和 shiro 中不同 url 集的身份验证

java http spring mvc 302重定向 url 中文乱码

Spring MVC 中的验证

通过 REST 在 Spring MVC 中进行身份验证

混合身份验证 - 基于 Spring MVC 会话 + 基于 JWT 令牌