私は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";
}
}
スタックトレースとエラーメッセージのペーストビンはありません。質問は自己完結型でなければなりません。私は今回はそれを修正した。 –
私はお詫び申し上げます。私はそれがもっと良いと思った。それを変更していただきありがとうございます! –
ok!フォームからデータを取得するのに 'POST'を使用しています。データをバインドするには' GET'ですか? – emotionlessbananas