Ошибка на странице JSP при использовании Spring MVC

1

"Я работаю над приложением Spring 3.1 MVC, и мой JSP не появится. Я получаю следующее на экране своего браузера.

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'command' available as request attribute.

мой контроллер

            package rugal.sample.common;

            import org.springframework.ui.ModelMap;
            import org.springframework.web.bind.annotation.ModelAttribute;
            import org.springframework.web.bind.annotation.RequestMapping;
            import org.springframework.web.bind.annotation.RequestMethod;
            import org.springframework.web.servlet.ModelAndView;

            public class StudentController
            {
                 @RequestMapping(value = "/student", method = RequestMethod.GET)
                   public ModelAndView student() {
                      return new ModelAndView("student", "command", new Student());
                   }

                   @RequestMapping(value = "/addStudent", method = RequestMethod.POST)
                   public String addStudent(@ModelAttribute("SpringWeb")Student student, 
                   ModelMap model) {
                      model.addAttribute("name", student.getName());
                      model.addAttribute("age", student.getAge());
                      model.addAttribute("id", student.getId());

                      return "result";
                   }
            }

Student.jsp

        <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
        <html>
        <head>
            <title>Spring MVC Form Handling</title>
        </head>
        <body>

        <h2>Student Information</h2>
        <form:form method="POST" action="/HelloWeb-servlet/addStudent">
           <table>
            <tr>
                <td><form:label path="name">Name</form:label></td>
                <td><form:input path="name" /></td>
            </tr>
            <tr>
                <td><form:label path="age">Age</form:label></td>
                <td><form:input path="age" /></td>
            </tr>
            <tr>
                <td><form:label path="id">id</form:label></td>
                <td><form:input path="id" /></td>
            </tr>
            <tr>
                <td colspan="2">
                    <input type="submit" value="Submit"/>
                </td>
            </tr>
        </table>  
        </form:form>
        </body>
        </html>


        ----------




    HelloWeb-servlet


    package rugal.sample.common;

    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.servlet.ModelAndView;

    public class StudentController
    {
         @RequestMapping(value = "/student", method = RequestMethod.GET)
           public ModelAndView student() {
              return new ModelAndView("student", "command", new Student());
           }

           @RequestMapping(value = "/addStudent", method = RequestMethod.POST)
           public String addStudent(@ModelAttribute("SpringWeb")Student student, 
           ModelMap model) {
              model.addAttribute("name", student.getName());
              model.addAttribute("age", student.getAge());
              model.addAttribute("id", student.getId());

              return "result";
           }
    }



ERROR:

org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/jsp/student.jsp at line 12

9: <form:form method="POST" action="/HelloWeb/addStudent">
10:    <table>
11:     <tr>
12:         <td><form:label path="name">Name</form:label></td>
13:         <td><form:input path="name" /></td>
14:     </tr>
15:     <tr>

Трассировки стека:

    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:553)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:452)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'command' available as request attribute
    org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:144)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:188)
    org.springframework.web.servlet.tags.form.LabelTag.autogenerateFor(LabelTag.java:130)
    org.springframework.web.servlet.tags.form.LabelTag.resolveFor(LabelTag.java:120)
    org.springframework.web.servlet.tags.form.LabelTag.writeTagContent(LabelTag.java:90)
    org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:84)
    org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:80)
    org.apache.jsp.WEB_002dINF.jsp.student_jsp._jspx_meth_form_005flabel_005f0(student_jsp.java:175)
    org.apache.jsp.WEB_002dINF.jsp.student_jsp._jspx_meth_form_005fform_005f0(student_jsp.java:110)
    org.apache.jsp.WEB_002dINF.jsp.student_jsp._jspService(student_jsp.java:72)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
Теги:
spring
spring-mvc

2 ответа

1
Лучший ответ

когда есть запрос предоставить вам Student.jsp контроллер должен обработать это следующим образом:

@RequestMapping(value = "/addStudent",method = RequestMethod.GET)
    public ModelAndView initView() {
        Student studentModel = new Student();

        return new ModelAndView("Student", "studentModel", studentModel );
    }

Затем Handel The Post:

  @RequestMapping(value = "/addStudent", method = RequestMethod.POST)
                   public String addStudent(@ModelAttribute("studentModel")Student student, 
                   ModelMap model) {
                      model.addAttribute("name", student.getName());
                      model.addAttribute("age", student.getAge());
                      model.addAttribute("id", student.getId());
//hope you have a result.jsp if you don't then return the name of your desired page
                      return "result";
                   }

Вы должны добавить команду studentName studentModel в свою форму и удалить helloWeb-servlet из действия формы:

<form:form method="post" action="/addStudent" commandName="studentModel">

и убедитесь, что имя в ваших вводах форм является точным совпадением с атрибутами вашего класса Student

    Student.java
package rugal.sample.common;


public class Student
{
    private Integer age;
       private String name;
       private Integer id;

       public void setAge(Integer age) {
          this.age = age;
       }
       public Integer getAge() {
          return age;
       }

       public void setName(String name) {
          this.name = name;
       }
       public String getName() {
          return name;
       }

       public void setId(Integer id) {
          this.id = id;
       }
       public Integer getId() {
          return id;
       }
}

EDIT check Student.jsp Line 12 remove: <form:label path="name">Name </form:label> и заменить его на <label>Name</label>

  • 0
    Мне нравится ваш ответ, но опять же, он показывает ту же проблему. я изменил имя команды и изменил контроллер ... но он снова сказал .......... java.lang.IllegalStateException: ни BindingResult, ни простой целевой объект для имени компонента 'studentModel' не доступны в качестве атрибута запроса
  • 0
    Вы можете опубликовать студенческий класс?
Показать ещё 9 комментариев
1

Отображение контроллера '/addStudent' ожидает параметра типа 'Student', который должен быть passe d для контроллера. Пожалуйста, создайте класс pojo с именем 'Student' и передайте его контроллеру. Для этого используйте имя команды внутри тега from.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню