2017-03-20 16 views
0

私はSpring MVCには新しく、チュートリアルでは基本的な困難を感じました。しかし、私が1つのJSPページで複数のフォームでそれを実行しようとしたとき、それは動作しません。人体測定データフォームの「保存」ボタンをクリックするたびに、「vitalsigns」モデル属性の不正な例外エラーが表示されます。バイタルサインフォームの「保存」ボタンをクリックするたびに、「anthropometricdata」モデル属性の不正な例外エラーが表示されます。私は正しいリクエストマッピングがあると、なぜ春が混乱しているのか分からない。jspページ内の複数のフォームが混乱する原因となるのはなぜですか?

私はすべてのModelAttributesで( "nameofmodelattribute")を追加しようとしましたが、それでも助けにはなりませんでした。

私は他のフォームを削除し、人体測定データフォームだけを残しても機能しますが、私はこれがどう起こっているのか分からないようです。

これは示して完全なエラーです:

HTTP Status 500 - An exception occurred processing JSP page /WEB-INF/view/itr.jsp at line 10 

type Exception report 

message An exception occurred processing JSP page /WEB-INF/view/itr.jsp at line 10 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/view/itr.jsp at line 10 

7: <table> 
8:  <tr> 
9:   <td>Height</td> 
10:    <td><form:input path="height" /></td> 
11:   </tr> 
12:   <tr> 
13:    <td>Weight</td> 


Stacktrace: 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:579) 
    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) 
    org.openmrs.web.filter.JspClassLoaderFilter.doFilter(JspClassLoaderFilter.java:47) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) 
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168) 
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1228) 
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.openmrs.module.web.filter.ForcePasswordChangeFilter.doFilter(ForcePasswordChangeFilter.java:60) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    org.openmrs.module.web.filter.ModuleFilterChain.doFilter(ModuleFilterChain.java:72) 
    org.openmrs.module.owa.filter.OwaFilter.doFilter(OwaFilter.java:64) 
    org.openmrs.module.web.filter.ModuleFilterChain.doFilter(ModuleFilterChain.java:70) 
    org.openmrs.module.web.filter.ModuleFilter.doFilter(ModuleFilter.java:54) 
    org.openmrs.web.filter.OpenmrsFilter.doFilterInternal(OpenmrsFilter.java:108) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:150) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    org.openmrs.web.filter.StartupFilter.doFilter(StartupFilter.java:105) 
    org.openmrs.web.filter.StartupFilter.doFilter(StartupFilter.java:105) 
    org.openmrs.web.filter.StartupFilter.doFilter(StartupFilter.java:105) 
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
root cause 

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'anthropometricdata' 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.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:154) 
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:141) 
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:132) 
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:116) 
    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) 
    org.apache.jsp.WEB_002dINF.view.itr_jsp._jspx_meth_form_005finput_005f0(itr_jsp.java:566) 
    org.apache.jsp.WEB_002dINF.view.itr_jsp._jspx_meth_form_005fform_005f0(itr_jsp.java:478) 
    org.apache.jsp.WEB_002dINF.view.itr_jsp._jspService(itr_jsp.java:181) 
    org.apache.jasper.runtime.HttpJspBase.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) 
    org.openmrs.web.filter.JspClassLoaderFilter.doFilter(JspClassLoaderFilter.java:47) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) 
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168) 
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1228) 
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.openmrs.module.web.filter.ForcePasswordChangeFilter.doFilter(ForcePasswordChangeFilter.java:60) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    org.openmrs.module.web.filter.ModuleFilterChain.doFilter(ModuleFilterChain.java:72) 
    org.openmrs.module.owa.filter.OwaFilter.doFilter(OwaFilter.java:64) 
    org.openmrs.module.web.filter.ModuleFilterChain.doFilter(ModuleFilterChain.java:70) 
    org.openmrs.module.web.filter.ModuleFilter.doFilter(ModuleFilter.java:54) 
    org.openmrs.web.filter.OpenmrsFilter.doFilterInternal(OpenmrsFilter.java:108) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:150) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    org.openmrs.web.filter.StartupFilter.doFilter(StartupFilter.java:105) 
    org.openmrs.web.filter.StartupFilter.doFilter(StartupFilter.java:105) 
    org.openmrs.web.filter.StartupFilter.doFilter(StartupFilter.java:105) 
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 

私のJSPファイル:

<h1>Individual Treatment Record</h1> 

<h3>Anthropometric Data</h3> 
<form:form action="anthropometricdata.form" method="POST" modelAttribute="anthropometricdata"> 
    <table> 
     <tr> 
      <td>Height</td> 
      <td><form:input path="height" /></td> 
     </tr> 
     <tr> 
      <td>Weight</td> 
      <td><form:input path="weight" /></td> 
     </tr> 
     <tr> 
      <td>Body Mass Index</td> 
      <td></td> 
     </tr> 
     <tr> 
      <td>Waist Circumference</td> 
      <td><form:input path="waistCircumference" /></td> 
     </tr> 
     <tr> 
      <td>Hip Circumference</td> 
      <td><form:input path="hipCircumference" /></td> 
     </tr> 
     <tr> 
      <td>Waist-Hip Ratio</td> 
      <td></td> 
     </tr> 
     <tr> 
      <td>Head Circumference</td> 
      <td><form:input path="headCircumference" /></td> 
     </tr> 
     <tr> 
      <td>Chest Circumference</td> 
      <td><form:input path="chestCircumference" /></td> 
     </tr> 
     <tr> 
      <td colspan="2"> 
       <input type="submit" name="action" value="Save" /> 
       <input type="submit" name="action" value="Cancel" /> 
      </td> 
     </tr> 
    </table> 
</form:form> 
<br> 
<table border="1"> 
    <th>ID</th> 
    <th>Height</th> 
    <th>Weight</th> 
    <th>Body Mass Index</th> 
    <th>Waist Circumference</th> 
    <th>Hip Circumference</th> 
    <th>Waist-Hip Ratio</th> 
    <th>Head Circumference</th> 
    <th>Chest Circumference</th> 
    <c:forEach items="${anthropometricdataList}" var="anthropometricdata"> 
     <tr> 
      <td>${anthropometricdata.anthropometricDataId}</td> 
      <td>${anthropometricdata.height}</td> 
      <td>${anthropometricdata.weight}</td> 
      <td>${anthropometricdata.bmi}</td> 
      <td>${anthropometricdata.waistCircumference}</td> 
      <td>${anthropometricdata.hipCircumference}</td> 
      <td>${anthropometricdata.waistHipRatio}</td> 
      <td>${anthropometricdata.headCircumference}</td> 
      <td>${anthropometricdata.chestCircumference}</td> 
     </tr> 
    </c:forEach> 
</table> 

<h3>Vital Signs</h3> 

<form:form action="vitalsigns.form" method="POST" modelAttribute="vitalsigns"> 
    <table> 
     <tr> 
      <td>Blood Pressure</td> 
      <td><form:input path="bloodPressure" type="number"/></td> 
     </tr> 
     <tr> 
      <td>Heart Rate</td> 
      <td><form:input path="heartRate" type="number"/></td> 
     </tr> 
     <tr> 
      <td>Respiratory Rate</td> 
      <td><form:input path="respiratoryRate" type="number"/></td> 
     </tr> 
     <tr> 
      <td>Body Temperature</td> 
      <td><form:input path="bodyTemperature" type="number" /></td> 
     </tr> 
     <tr> 
      <td colspan="2"> 
       <input type="submit" name="action" value="Save" /> 
       <input type="submit" name="action" value="Cancel" /> 
      </td> 
     </tr> 
    </table> 
</form:form> 
<br> 
<table border="1"> 
    <th>ID</th> 
    <th>Blood Pressure</th> 
    <th>Heart Rate</th> 
    <th>Respiratory Rate</th> 
    <th>Body Temperature</th> 
    <c:forEach items="${vitalsignsList}" var="vitalsigns"> 
     <tr> 
      <td>${vitalsigns.vitalSignsId}</td> 
      <td>${vitalsigns.bloodPressure}</td> 
      <td>${vitalsigns.heartRate}</td> 
      <td>${vitalsigns.respiratoryRate}</td> 
      <td>${vitalsigns.bodyTemperature}</td> 
     </tr> 
    </c:forEach> 
</table> 

<%@ include file="/WEB-INF/view/module/chitscore/template/footer.jsp" %> 

私のコントローラクラス:すべての

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Map; 

import org.openmrs.module.chitscore.model.AnthropometricData; 
import org.openmrs.module.chitscore.model.VitalSigns; 
import org.openmrs.module.chitscore.service.AnthropometricDataService; 
import org.openmrs.module.chitscore.service.VitalSignsService; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.validation.BindingResult; 
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.bind.annotation.RequestParam; 

@Controller 
public class ITRController { 
    @Autowired 
    private AnthropometricDataService anthropometricDataService; 
    @Autowired 
    private VitalSignsService vitalSignsService; 

    @RequestMapping(value="/patient/itr") 
    public String setupForm(Map<String, Object> map){ 
     AnthropometricData anthropometricData = new AnthropometricData(); 
     VitalSigns vitalSigns = new VitalSigns(); 
     map.put("anthropometricdata", anthropometricData); 
     map.put("anthropometricdataList", anthropometricDataService.getAllAnthropometricData()); 
     map.put("vitalsigns", vitalSigns); 
     map.put("vitalsignsList", vitalSignsService.getAllVitalSigns()); 
     return "itr"; 
    } 

    @RequestMapping(value="/patient/anthropometricdata.form", method=RequestMethod.POST) 
    public String doActions(@ModelAttribute("anthropometricdata") AnthropometricData anthropometricData, BindingResult result, @RequestParam String action, Map<String, Object> map){ 
     AnthropometricData anthropometricDataResult = new AnthropometricData(); 
     switch(action.toLowerCase()){ //only in Java7 you can put String in switch 
     case "save": 
      Date timestamp = new Date(); 
      anthropometricData.setTimestamp(timestamp); 
      anthropometricDataService.add(anthropometricData); 
      anthropometricDataResult = anthropometricData; 
      break;   
     } 

     map.put("anthropometricdata", anthropometricDataResult); 
     map.put("anthropometricdataList", anthropometricDataService.getAllAnthropometricData()); 
     return "itr"; 
    } 

    @RequestMapping(value="/patient/vitalsigns.form", method=RequestMethod.POST) 
    public String doActions(@ModelAttribute("vitalsigns") VitalSigns vitalSigns, BindingResult result, @RequestParam String action, Map<String, Object> map){ 
     VitalSigns vitalSignsResult = new VitalSigns(); 
     switch(action.toLowerCase()){ //only in Java7 you can put String in switch 
     case "save": 
      Date timestamp = new Date(); 
      vitalSigns.setTimestamp(timestamp); 
      vitalSignsService.add(vitalSigns); 
      vitalSignsResult = vitalSigns; 
      break;   
     } 

     map.put("vitalsigns", vitalSignsResult); 
     map.put("vitalsignsList", vitalSignsService.getAllVitalSigns()); 
     return "itr"; 
    } 

} 
+1

スタックトレースとエラーメッセージのペーストビンはありません。質問は自己完結型でなければなりません。私は今回はそれを修正した。 –

+0

私はお詫び申し上げます。私はそれがもっと良いと思った。それを変更していただきありがとうございます! –

+0

ok!フォームからデータを取得するのに 'POST'を使用しています。データをバインドするには' GET'ですか? – emotionlessbananas

答えて

0

まず、私はみんなに感謝したいです誰が助けようとしたのですか?私はすでに問題を見つけました。

「保存」を1つのフォームでクリックすると、doActionsメソッドに入り、doActionsメソッド内では、setupFormメソッドに表示されているように、もう一方のモデルはmap.putではなくなります。これは私のコントローラクラスが今見ているものです:

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Map; 

import org.openmrs.module.chitscore.model.AnthropometricData; 
import org.openmrs.module.chitscore.model.VitalSigns; 
import org.openmrs.module.chitscore.service.AnthropometricDataService; 
import org.openmrs.module.chitscore.service.VitalSignsService; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.validation.BindingResult; 
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.bind.annotation.RequestParam; 

@Controller 
public class ITRController { 
    @Autowired 
    private AnthropometricDataService anthropometricDataService; 
    @Autowired 
    private VitalSignsService vitalSignsService; 

    AnthropometricData anthropometricData = new AnthropometricData(); 
    VitalSigns vitalSigns = new VitalSigns(); 

    @RequestMapping(value="/patient/itr") 
    public String setupForm(Map<String, Object> map){ 
     map.put("anthropometricdata", anthropometricData); 
     map.put("anthropometricdataList", anthropometricDataService.getAllAnthropometricData()); 
     map.put("vitalsigns", vitalSigns); 
     map.put("vitalsignsList", vitalSignsService.getAllVitalSigns()); 
    } 

    @RequestMapping(value="/patient/anthropometricdata.form", method=RequestMethod.POST) 
    public String doActions(@ModelAttribute("anthropometricdata") AnthropometricData anthropometricData, BindingResult result, @RequestParam String action, Map<String, Object> map){ 
     AnthropometricData anthropometricDataResult = new AnthropometricData(); 
     switch(action.toLowerCase()){ //only in Java7 you can put String in switch 
     case "save": 
      Date timestamp = new Date(); 
      anthropometricData.setTimestamp(timestamp); 
      anthropometricDataService.add(anthropometricData); 
      anthropometricDataResult = anthropometricData; 
      break;   
     } 

     map.put("anthropometricdata", anthropometricDataResult); 
     map.put("anthropometricdataList", anthropometricDataService.getAllAnthropometricData()); 
     map.put("vitalsigns", vitalSigns); 
     map.put("vitalsignsList", vitalSignsService.getAllVitalSigns()); 
    } 

    @RequestMapping(value="/patient/vitalsigns.form", method=RequestMethod.POST) 
    public String doActions(@ModelAttribute("vitalsigns") VitalSigns vitalSigns, BindingResult result, @RequestParam String action, Map<String, Object> map){ 
     VitalSigns vitalSignsResult = new VitalSigns(); 
     switch(action.toLowerCase()){ //only in Java7 you can put String in switch 
     case "save": 
      Date timestamp = new Date(); 
      vitalSigns.setTimestamp(timestamp); 
      vitalSignsService.add(vitalSigns); 
      vitalSignsResult = vitalSigns; 
      break;   
     } 

     map.put("vitalsigns", vitalSignsResult); 
     map.put("vitalsignsList", vitalSignsService.getAllVitalSigns()); 
     map.put("anthropometricdata", anthropometricData); 
     map.put("anthropometricdataList", anthropometricDataService.getAllAnthropometricData()); 
    } 
関連する問題