2016-06-30 8 views
0

からデータを取得するとき、私はいくつかの時間のために私をバック保持し、MavenのWebアプリケーションとかなり厄介なとイライラする問題を抱えています。 はどうやら、私の以前のGoogle検索から、これは一般的なSpring MVCのエラーですが、私はこれまで、インターネット上で提供されるものの間で必要な解決策を見つけることができないのです。私はSpringの初心者であり、一般的なMVCの概念であることに注意してください。Javaの春 - IllegalStateExceptionがJSPフォーム

私は、建物管理(住民、賃貸料計算など)を管理するはずのWebアプリケーションを持っています。これは私のディスパッチャ・サーブレットです

@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; 
    } 
} 

:私はSpring MVCのは、Hibernate、Javaの1.8、Tomcatの8サーバーコンテナ、およびSQL Server 2014 はまず、これは、住民と呼ばれるタイプbuldingの住民のための私のPOJOで使用します.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名用プレーンなターゲットオブジェクトのいずれも「住民の要求属性として利用できる

DESCRIPサーバーがこのエラーを処理できないという内部エラーが発生しました。

例外org.apache.jasper.JasperExceptionが: java.lang.IllegalStateException:BindingResultもBean名要求 属性 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) 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)

根本原因java.lang.IllegalStateException:どちらBindingResultも要求 として使用可能なBean名 '住民' の プレーンなターゲットオブジェクト属性 org.springframework.web.servlet.support.BindStatus。(BindStatus.java:144) org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168) org.springframework.webプロパティ。 mElementTag.java:154) org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag。プロパティ。 Javaの:142) org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:84) org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:80) ORG .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

これを行うことをしないでくださいあなたが春の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> 

は、あなたが作成し、フォームや他のためを示すために住民 1を保存するために、コントローラで2つのメソッドを必要としますフォームデータをデータベースに保存します。今すぐあなたのコントローラは次のようになります。

@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> 

私はあなたが適切があなたのhibernateConfiguration.xmlファイルおよびpersistence.xmlのファイルを投稿冬眠構成されていることを疑います。

これらのことを学び、理解する必要があります。ちょうど時間をかけてください。

  • 春モデルコントローラビューとどのようにそれは本当に
  • 春のフォーム要素を動作し、春のフォームバリデーション
  • JPA /休止状態で休止状態の基礎/関連
  • のJSPタグライブラリJSP/Apacheのタイル
  • 内部/ JSP
-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

彼らはすでに 'inhabitant'に対して' @ ModelAttribute'を持っています。 –

+0

もし私がコントローラメソッドをコメントアウトしても、私は同じエラーが発生します。だからこそ、私はjspに何か問題があると思うのです。 – BadWolf

関連する問題