2014-07-14 107 views
1

在Spring 3.1 MVC應用程序中工作,我的JSP不會出現。我在瀏覽器屏幕上顯示以下內容。使用Spring 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) 

回答

1

時有呈現你Student.jsp控制器必須處理這個請求方式:

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

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

然後亨德爾的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"; 
        } 

您應該命令名studentModel添加到您的形式,從形式的行動刪除helloWeb-servlet

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

,使確保表單輸入中的名稱與012的屬性完全匹配類

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 檢查Student.jsp線12刪除:<form:label path="name">Name </form:label>和由<label>Name</label>

+0

我喜歡你的答案bt再次顯示相同的問題。我已經改變了命令名稱並修改了控制器..bt,他再次說他......... java.lang.IllegalStateException:BindingResult和bean名稱'studentModel'的無效目標對象都可以作爲請求屬性 – user3825086

+0

提供學生課? –

+0

,我忘了告訴我pojo或bean類的名字是「Student」。 – user3825086

1

控制器映射 '/傳遞addStudent' 期待類型 '學生' 的參數,它需要更換它請傳遞給控制器​​。請創建一個名爲'學生'的POJO類並將其傳遞給控制器​​。使用from標籤中的commandName來執行此操作。