1

嗨,我正面临一个问题,并在互联网上四处寻找,但仍然无法找出根本原因。我正在发布我的代码片段,请帮助我,因为我是 spring 3 的新手。我在表单中使用modelAttribute,我希望在控制器中所有来自请求的值都应该支持在对象中,以便我可以执行验证和其他商业逻辑。我知道只有我的控制器有错误。

1) index.jsp

<form:form action="login" method="POST" modelAttribute="login">
        <table>
            <tr><td>User Id:</td><td><form:input path="userId"/></td></tr>
            <tr><td>Password:</td><td><form:password path="userPassword"/></td></tr>
            <tr><td></td><td><input type="submit" value="Login"/></td></tr>
        </table>
    </form:form>

2) 控制器

@RequestMapping(value="/login/", method=RequestMethod.POST)
public String login(@ModelAttribute("login") @Valid Login login,BindingResult result)
    {

        System.out.println("We have entered into controller class");
        if(result.hasErrors())
        {
            System.out.println("Errors:"+result.getFieldError("userReject"));
                return "redirect:/login";
                }
                else
                {
        return "home";}
    }
}

3) JBoss 日志

04:35:29,067 ERROR [org.springframework.web.servlet.tags.form.InputTag] (http--0.0.0.0-8090-1) Neither BindingResult nor plain target object for bean name 'login' available as request attribute: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'login' available as request attribute
        at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141) [spring-webmvc-3.0.5.Release.jar:3.0.5.RELEASE]
4

1 回答 1

0

问题不在于您发布的处理登录表单提交的方法。它在用于显示表单的方法中。表单需要从名为“login”的 bean 填充其字段,并且您没有将任何名为“login”的 bean 放置在模型中,即在请求属性中。

旁注:登录表单不应该使用 GET。它应该使用 POST。您真的不希望密码出现在浏览器地址栏中。而且您不希望它出现在浏览器历史记录、服务器和代理日志等中。

于 2014-01-31T23:27:22.980 回答