java.lang.IllegalStateException:BindingResult和bean名称'addStudent'的普通目标对象都不能作为请求属性使用

时间:2014-10-10 07:31:53

标签: java spring jsp spring-mvc spring-form

这是form.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Add Student</title>
</head>
<body>
    <form:form action="addStudent" commandName="addStudent" method="post">
        <table>
            <tr>
                <td><form:label path="name">Name:</form:label></td> <td><form:input path="name"/></td>
            </tr>
            <tr>
                <td><form:label path="email">Email:</form:label></td> <td><form:input path="email"/></td>
            </tr>
            <tr>
                <td><form:label path="age">Age:</form:label></td> <td><form:input path="age"/></td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="Submit"></td>
            </tr>
        </table>
    </form:form>
</body>
</html>

这是控制器方法

@RequestMapping(value="/addStudent", method=RequestMethod.POST)
public String addStudent(@ModelAttribute("addStudent") Student student) {
    System.out.println("Saving Info...");
    System.out.println("Name: "+student.getName());
    System.out.println("Email: "+student.getEmail());
    System.out.println("Age: "+student.getAge());
    return "form";
}

这是学生模型

public class Student {

    private String name;
    private String email;
    private int age;
    private int id;

    public Student() {
        super();
    }
}

我想不需要web.xml或dispatcher-servlet.xml。每个东西都被正确绑定,我的意思是commandName在jsp中是正确的。 ModelAttribute在控制器中是正确的,然后为什么控制器没有到达控制器? :(

请帮忙。我已经浪费了半天的时间。 PS:我是Spring和stackoverflow的新手。

修改

建议之后,我的代码如下:

控制器方法:

public String addStudent(@ModelAttribute("student") Student student, BindingResult result) {

jsp表格:

<form:form action="addStudent" commandName="student" method="post">

修改

自己解决了 为modelattibute添加了这个方法

@ModelAttribute("student")
    public Student getForm() {
        return new Student();
    }

1 个答案:

答案 0 :(得分:0)

只要commandName和modelAttribute字符串相同即可。

同样我是Spring的新手和东西...... 但是我猜它找不到正确的请求映射,因为你在请求映射中有/ addStudent,而在表单动作中只有addStudent。如果表单在上下文根目录中,那很好。 你能尝试检查一下吗?

另外,请在arg列表中添加BindingResult对象 public String addStudent(@ModelAttribute(&#34; addStudent&#34;)Student student,BindingResult results)