【问题标题】:Neither BindingResult nor plain target object for bean in spring 3spring 3 中 bean 的 BindingResult 和普通目标对象都不是
【发布时间】:2014-02-24 20:16:15
【问题描述】:

您好,我遇到了一个问题,我查看了整个互联网,但仍然无法找出根本原因。我正在发布我的代码 sn-p 请帮助我,因为我是 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]

【问题讨论】:

    标签: spring runtime-error modelattribute spring-form


    【解决方案1】:

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

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

    【讨论】:

    • 感谢@JB Nizet 的快速回复。由于我是新人,我无法对其进行整理。它是一个简单的登录页面,我将在其中输入用户 ID 和用户密码,然后在控制器中我将使用 DB 检查它,然后验证用户。你能帮我用一点代码sn-p作为我应该做的改变吗???感谢您的建议,这是我的错误。我已将 t 改回 POST
    • 正如我所说,错误出在您没有显示的方法中,为了显示登录表单而调用了该方法。发这个方法。如果您直接显示 JSP,而不通过控制器方法,则修复该问题。每个请求都应该通过一个控制器。这就是 MVC 的全部意义所在。
    • 但是先生,这是我的索引页。我的意思是当我启动我的应用程序时,这应该首先向用户询问凭据,在这种方法中要修改什么以及要修复什么。如果你想看,我可以提供 git 代码
    • 不,我不看。不应直接调用任何 JSP。一切都应该通过一个控制器。
    • 感谢先生的宝贵建议,我现在改变了我的方法,而不是直接调用我现在通过控制器的 jsp。此外,我得到了表单试图从“登录”模型填充字段值的问题的根本原因,该模型没有实例化那是因为我遇到了错误。但是先生,我在想有没有其他方法可以只调用jsp,并且可以在调用jsp页面之前将模型值设置为null或空白?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    相关资源
    最近更新 更多