我是Spring MVC的新手,我找到了让我做基本的教程的教程。但是,当我尝试在一个jsp页面中的多个表单上执行它时,它不起作用。每当我点击人体测量数据表单上的“保存”按钮时,它会显示“vitalsigns”模型属性的illegalstateexception错误。每当我点击生命体征表单上的“保存”按钮时,它会显示“anthropometricdata”模型属性的非法状态异常错误。当我有正确的请求映射时,我不明白为什么Spring会感到困惑。
我尝试在我的所有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";
}
}
答案 0 :(得分:0)
首先,我要感谢所有试图提供帮助的人,但我已经找到了问题。
当我点击&#34;保存&#34;在一种形式中,它进入doActions方法,而在doActions方法中,其他模型不再是map.put,就像在setupForm方法中看到的那样。这就是我的控制器类现在所看到的:
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());
}