2016-06-30 20 views
0

我对Maven Web应用程序有一个非常讨厌且令人沮丧的问题,让我暂时停滞不前。 显然,从我以前的谷歌搜索,这是一个常见的Spring MVC错误,但我无法找到我需要的互联网上提供的解决方案迄今。请注意,我在Spring和MVC概念中都是初学者。Java Spring - 从jsp表单检索数据时发生IllegalStateException

我有一个Web应用程序应该管理建筑管理(居民,租金计算等)。我使用Spring MVC的,休眠,爪哇1.8,Tomcat的8服务器容器,和SQL Server 2014 首先,这是我对BULDING居民POJO,被称为居民类型:

@Entity 
@Table (name = "INHABITANT") 
public class Inhabitant { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name = "ID") 
    private long id; 

    @Column(name = "FIRSTNAME") 
    private String firstName; 

    @Column(name = "LASTNAME") 
    private String lastName; 

    @Column(name = "APARTAMENT_NUMBER") 
    private String apartamentNumber; 

    @Column(name = "APARTAMENT_OWNER") 
    private String apartamentOwner; 

    @Column(name = "TELEPHONE_NUMBER") 
    private String telephoneNumber; 

    @Column(name = "EMAIL_ADDRESS") 
    private String emailAddress; 

    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public String getApartamentNumber() { 
     return apartamentNumber; 
    } 

    public void setApartamentNumber(String apartamentNumber) { 
     this.apartamentNumber = apartamentNumber; 
    } 

    public String getApartamentOwner() { 
     return apartamentOwner; 
    } 

    public void setApartamentOwner(String apartamentOwner) { 
     this.apartamentOwner = apartamentOwner; 
    } 

    public String getTelephoneNumber() { 
     return telephoneNumber; 
    } 

    public void setTelephoneNumber(String telephoneNumber) { 
     this.telephoneNumber = telephoneNumber; 
    } 

    public String getEmailAddress() { 
     return emailAddress; 
    } 

    public void setEmailAddress(String emailAddress) { 
     this.emailAddress = emailAddress; 
    } 
} 

这是我的调度员的servlet .XML:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd"> 

    <context:component-scan base-package="laura.bachelordegree.controller" /> 

    <bean 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/jsp/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 

</beans> 

这是我的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"> <!-- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
     version="3.1" --> 
    <display-name>BuildingAdministration</display-name> 
    <welcome-file-list> 
     <welcome-file>login/index.jsp</welcome-file> 
    </welcome-file-list> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/applicationContext.xml</param-value> 
    </context-param> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener 
     </listener-class> 
    </listener> 
    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet 
     </servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/login</url-pattern> 
    </servlet-mapping> 
</web-app> 

这是我的jsp登记表,应映射到居民对象:

<!DOCTYPE html> 
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 
<%@taglib prefix="spring" uri="http://www.springframework.org/tags" %> 
<%@page session="false" %> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <title>Registration</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 

    <link rel="stylesheet" type="text/css" href="login/bootstrap/css/bootstrap.min.css" /> 
    <link rel="stylesheet" type="text/css" href="login/font-awesome/css/font-awesome.min.css" /> 

    <script type="text/javascript" src="login/js/jquery-1.10.2.min.js"></script> 
    <script type="text/javascript" src="login/bootstrap/js/bootstrap.min.js"></script> 
</head> 
<body> 

<!-- Registration form - START --> 
<div class="container"> 
    <div class="row"> 
     <%-- <form role="form"> --%> 
     <form:form method="post" modelAttribute="inhabitant" role="form" action="BuildingAdministration/src/main/webapp/login/result"> 
      <div class="col-lg-6"> 
       <div class="well well-sm"><strong><span class="glyphicon glyphicon-asterisk"></span>Required Field</strong></div> 
       <div class="form-group"> 
        <label for="InputFirstName">Enter First Name</label> 
        <div class="input-group"> 
         <form:input path="firstName" type="text" cssClass="form-control" id="InputFirstName" /> 
         <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span> 
        </div> 
       </div> 
       <div class="form-group"> 
        <label for="InputLastName">Enter Last Name</label> 
        <div class="input-group"> 
         <form:input path="lastName" type="text" cssClass="form-control" id="InputLastName" /> 
         <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span> 
        </div> 
       </div> 
       <div class="form-group"> 
        <label for="InputApartmentNumber">Enter Apartment Number</label> 
        <div class="input-group"> 
         <form:input path="apartmentNumber" type="text" cssClass="form-control" id="InputApartmentNumber" /> 
         <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span> 
        </div> 
       </div> 
       <div class="form-group"> 
        <label for="InputApartmentOwner">Enter Apartment Owner</label> 
        <div class="input-group"> 
         <form:input path="apartmentOwner" type="text" cssClass="form-control" id="InputApartmentOwner" /> 
         <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span> 
        </div> 
       </div> 
       <div class="form-group"> 
        <label for="InputTelephoneNumber">Enter Telephone Number</label> 
        <div class="input-group"> 
         <form:input path="telephoneNumber" type="text" cssClass="form-control" id="InputTelephoneNumber" /> 
         <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span> 
        </div> 
       </div> 
       <div class="form-group"> 
        <label for="InputEmail">Enter Email</label> 
        <div class="input-group"> 
         <form:input path="emailAddress" type="email" cssClass="form-control" id="InputEmailFirst" /> 
         <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span> 
        </div> 
       </div> 
       <div class="form-group"> 
        <label for="InputEmail">Confirm Email</label> 
        <div class="input-group"> 
         <form:input path="emailAddress" type="email" cssClass="form-control" id="InputEmailSecond" /> 
         <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span> 
        </div> 
       </div> 
       <input type="submit" name="submit" id="submit" value="Submit" class="btn btn-info pull-right"> 
      </div> 
      </form:form> 
     <%-- </form> --%> 
     <div class="col-lg-5 col-md-push-1"> 
      <div class="col-md-12"> 
       <div class="alert alert-success"> 
        <strong><span class="glyphicon glyphicon-ok"></span> Success! Message sent.</strong> 
       </div> 
       <div class="alert alert-danger"> 
        <span class="glyphicon glyphicon-remove"></span><strong> Error! Please check all page inputs.</strong> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 
<!-- Registration form - END --> 

</body> 
</html> 

最后,控制类,这应该有效地将数据从与Java实体jsp的表格图,居民:

@RequestMapping(value = "/index", method = RequestMethod.GET) 
public String loadInhabitant(@ModelAttribute("inhabitant")Inhabitant inhabitant, 
      ModelMap model) { 
     model.addAttribute("firstName", inhabitant.getFirstName()); 
     model.addAttribute("lastName", inhabitant.getLastName()); 
     model.addAttribute("apartmentNumber", inhabitant.getApartamentNumber()); 
     model.addAttribute("apartmentOwner", inhabitant.getApartamentOwner()); 
     model.addAttribute("apartmentNumber", inhabitant.getApartamentNumber()); 
     model.addAttribute("telephoneNumber", inhabitant.getTelephoneNumber()); 
     model.addAttribute("emailAddress", inhabitant.getEmailAddress()); 
    return "result"; 
} 

现在,这是错误我得到每当我尝试运行我的服务器上的应用程序:

消息java.lang.IllegalStateException:既不BindingResult也不对bean名称纯目标对象“居民”可作为请求属性

记述服务器遇到内部错误,导致无法完成此请求。

例外org.apache.jasper.JasperException: java.lang.IllegalStateException:既不BindingResult也不对豆名 '居民' 可作为请求 属性 org.apache.jasper.servlet.JspServletWrapper平原 目标对象.handleJspException(JspServletWrapper.java:555) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:471) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 有机apache.jasper.servlet.JspServlet.service(JspServlet.java:340) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

根源java.lang.IllegalStateException:既不BindingResult也不对豆名“居民” 平原目标对象可以作为请求 属性 org.springframework.web.servlet.support.BindStatus。(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.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFor mElementTag.java:154) org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag。writeDefaultAttributes(AbstractDataBoundFormElementTag.java:117) org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:422) org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag。的java:142) org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:84) org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:80) 有机.apache.jsp.login.index_jsp._jspx_meth_form_005finput_005f0(index_jsp.java:322) org.apache.jsp.login.index_jsp._jspx_meth_form_005fform_005f0(index_jsp.java:216) org.apache.jsp.login.index_jsp._jspService(index_jsp .java:148) org.apache.jasper.runtime.HttpJ spBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) org.apache .jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) javax.servlet.http.HttpServlet.service(HttpServlet.java:729 ) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

我已经尝试了一千东西,但我只是无法得到它的工作。所以,请,有人能指出我做错了什么吗?我怎样才能正确建立基于jsp形式的信息的java对象?

在此先感谢!

回答

1

看来您需要了解更多关于Spring MVC的。

你映射的形式要求的视图。您必须映射您的表单请求到控制器方法不是一个视图,表单应该是这样的:

<form:form action="${pageContext.request.contextPath}/inhabitant/create" method="post" modelAttribute="inhabitant" > 
    .... 
    // have a look at spring form validation 
    // have a look at spring form elements eg. how error messages are displayed 
</form:form> 

你需要在控制器两种方法来创建和保存居民一个用于显示的形态和另一将表单数据保存到数据库中。现在你的控制器看起来应该是这样:

@Controller 
@RequestMapping(value="/inhabitant") 
public class PostController { 

@Autowired 
private InhabitantService inhabitantService; 

//Method that displays the form page 
@RequestMapping(value = "/create", method = RequestMethod.GET) 
public String createForm(Model model) { 

    model.addAttribute("inhabitant", new Inhabitant()); // identifier should be same as modelattribute in your form "inhabitant" 
    return "formpage"; // your form page name 

} 

// Method which will have the submitted data 
// Validation is also done in this method 
@RequestMapping(value="/create", method=RequestMethod.POST) 
public String saveForm(@ModelAttribute("inhabitant") @Valid Inhabitant inhabitant, //@valid is used for validation use it If you are doing validation 
     BindingResult result // use only if you are doing validation) 
{ 
     // use only If you are doing validation 
     // If validation fails users must return to the same form view 
     if (result.hasErrors()){ 
      return "formpage"; 
     } 

     //and save the submitted form data 
     inahabitantService.saveInhabitant(inhabitant); 
enter code here 
     return "success"; // success.jsp is a success page that you will see after creating a inhabitant 
} 

不要使用“/登录”作为在web.xml一个url百通只是不去做。

<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/login</url-pattern> //Just Use '/' instead of '/login' 
</servlet-mapping> 

我怀疑你已经配置了Hibernate的正确安置自己的hibernateConfiguration.xml文件和persistence.xml文件。

你必须学习和了解这些:只要看看你的时间。

  • 弹簧模型控制器视图,它是如何真正工作
  • Spring表单元素,春天表单验证
  • JPA /休眠基础/休眠协会
  • jsp的标签库/ JSP里面JSP/Apache的瓷砖
-1

不要做

model.addAttribute("firstName", inhabitant.getFirstName()); 
    model.addAttribute("lastName", inhabitant.getLastName()); 
    model.addAttribute("apartmentNumber", inhabitant.getApartamentNumber()); 
    model.addAttribute("apartmentOwner", inhabitant.getApartamentOwner()); 
    model.addAttribute("apartmentNumber", inhabitant.getApartamentNumber()); 
    model.addAttribute("telephoneNumber", inhabitant.getTelephoneNumber()); 
    model.addAttribute("emailAddress", inhabitant.getEmailAddress()); 

做到这一点,而不是

model.addAttribute("inhabitant", inhabitant); 
+0

我也试过,我仍然得到同样的错误。可能是jsp文件有问题吗? – BadWolf

+0

他们已经为'居民'拥有了@ @ ModelAttribute。 –

+0

如果有帮助,即使我注释掉控制器方法,也会得到相同的错误。这就是为什么我猜jsp有问题。 – BadWolf

相关问题