我认为问题在于Spring在提交以下input字段时不知道如何反序列化浏览器客户端发送的日期
<tr name='tstest'> <td>Date Of Birth</td> <td><form:input path='dateOfBirth' name='timestamp' value=''/><a href='javascript:show_calendar(’document.tstest.timestamp’, document.tstest.timestamp.value);'><img src='https://www.6hehe.com/images/cal.gif' border='0' alt='Click Here to Pick up the timestamp'></a> </td></tr>
Spring不知道如何将您输入的值带入该字段并将其转换为Date对象。您需要为此注册一个propertyeditor。例如,将以下内容添加到您的@Controller课程中
@InitBinderpublic void initBinder(WebDataBinder binder) { SimpleDateFormat sdf = new SimpleDateFormat('MM/dd/yyyy'); sdf.setLenient(true); binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true));}
显然,将更SimpleDateFormat改为客户端发送的内容。
在相关说明中,您通过发送重定向发送302响应
return 'redirect:/full-reg';
请记住,请求和模型属性仅在一个请求期间有效。因此,当您的客户将请求发送到时full-reg,您最初发送的表单输入参数不再存在。您应该重新考虑如何执行此操作。
解决方法我是Spring MVC的新手。运行项目时我被错误卡住 错误-客户端发送的请求在语法上不正确。我有一个实体类PatientInfo。我的jsp页面是demo1。我的控制器是患者控制器。我要实现的功能是将值插入数据库。但是我无法在控制器中调用我的函数(add-update2)。
demo1.jsp
<%@taglib prefix='form' uri='http://www.springframework.org/tags/form'%><html><head><title>Registration Form</title></head><body><h2 align='center'>Full Registration Form</h2><hr /><table cellpadding='5' cellspacing='5'> <form:form modelAttribute='patientInfo' method='POST' action='add-update2'> <tr> <td> First Name</td> <td><form:input path='firstName'/></td></tr> <tr> <td>Middle Name</td> <td><form:input path='middleName' /></td></tr><tr> <td>Last Name</td> <td><form:input path='lastName'/> </td></tr><tr> <td>Age</td> <td><form:input path='age' /></td></tr><tr> <td>Gender</td> <td><form:select path='gender'><form:option value='' label='Select Gender' /><form:options items='${genderList}' itemLabel='gender' itemValue='gender' /> </form:select></td></tr><tr> <td>Marital Status</td> <td><form:select path='maritalStatus'> <form:option value='' label='Select Marital Status' /> <form:options items='${maritalList}' itemLabel='maritalstatus' itemValue='maritalstatus' /></form:select></td></tr> <tr> <td>Nationality</td> <td><form:select path='nationality'><form:option value='' label='Select Nationality' /><form:options items='${nationalityList}' itemLabel='country' itemValue='country' /> </form:select></td></tr> <tr name='tstest'> <td>Date Of Birth</td> <td><form:input path='dateOfBirth' name='timestamp' value=''/><a href='javascript:show_calendar(’document.tstest.timestamp’,document.tstest.timestamp.value);'><img src='https://www.6hehe.com/images/cal.gif' border='0' alt='Click Here to Pick up the timestamp'></a> </td> </tr><tr> <td>E-mail</td> <td><form:input path='email'/></td></tr> <tr> <td>Blood Group</td> <td><form:select path='bloodGroup'><form:option value='' label='Select Blood Group' /><form:options items='${bloodList}' itemLabel='bloodgroupname' itemValue='bloodgroupname' /> </form:select></td></tr><tr> <td><input type='submit' value='submit'/></td></tr> </form:form></table></body></html>
Controller-PatientController.java
package com.app.ehr.api;import com.app.ehr.domain.Bloodgroup;import com.app.ehr.domain.Gendertype;import com.app.ehr.entities.Patientinfo;import com.app.ehr.domain.Maritalstatus;import com.app.ehr.domain.Nationality;import com.app.ehr.model.Patient;import com.app.ehr.service.PatientService;import org.springframework.stereotype.Controller;import java.util.ArrayList;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.ui.Model;import org.springframework.ui.ModelMap;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;@Controllerpublic class PatientController { public PatientService patientService; @Autowired public PatientController(PatientService patientService){ this.patientService = patientService; } @RequestMapping(value='/',method= RequestMethod.GET) public String index(ModelMap map) {return 'index'; } @RequestMapping(value='/full-reg',method= RequestMethod.GET) public String fullreg(ModelMap map,Patientinfo patientInfo) {List<Bloodgroup> bloodList = new ArrayList<Bloodgroup>();List<Gendertype> genderList = new ArrayList<Gendertype>(); List<Nationality> nationalityList = new ArrayList<Nationality>(); List<Maritalstatus> maritalList = new ArrayList<Maritalstatus>();bloodList=patientService.getAllBloodgroup();genderList= patientService.getAllGendertype();nationalityList=patientService.getAllNationality();maritalList=patientService.getAllMaritalstatus();for(int i=0;i<bloodList.size();i++){ System.out.println('---------------------Controller'+bloodList.get(i));} // map.addAttribute('hello','Hello Spring from Netbeans!!'); map.addAttribute('patientInfo',patientInfo);map.addAttribute('bloodList',patientService.getAllBloodgroup());map.addAttribute('genderList',patientService.getAllGendertype()); map.addAttribute('maritalList',patientService.getAllMaritalstatus()); map.addAttribute('nationalityList',patientService.getAllNationality());return 'demo1'; }@RequestMapping(value='/add-update2',method= RequestMethod.POST) public String addUpdate(@ModelAttribute('patientInfo') Patientinfo patientInfo) {System.out.println('----------------------------------------- From Controller------------------------------------------------');//patientService.addPatient(patientInfo);return 'redirect:/full-reg'; }}
实体类-PatientInfo.java
package com.app.ehr.entities;import java.io.Serializable;import java.math.BigInteger;import java.util.Date;import javax.persistence.Basic;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.NamedQueries;import javax.persistence.NamedQuery;import javax.persistence.Table;import javax.persistence.Temporal;import javax.persistence.TemporalType;/** * * @author HP LAPTOP */@Entity@Table(name = 'patientinfo')@NamedQueries({ @NamedQuery(name = 'Patientinfo.findAll',query = 'SELECT p FROM Patientinfo p')})public class Patientinfo implements Serializable { private static final long serialVersionUID = 1L; @Id @Basic(optional = false) @Column(name = 'PatientKey') private Long patientKey; @Column(name = 'PatientMRNumber') private String patientMRNumber; @Column(name = 'IntPrimaryPhysicianKey') private BigInteger intPrimaryPhysicianKey; @Column(name = 'FirstName') private String firstName; @Column(name = 'MiddleName') private String middleName; @Column(name = 'LastName') private String lastName; @Column(name = 'Age') private Short age; @Column(name = 'Gender') private String gender; @Column(name = 'Nationality') private String nationality; @Column(name = 'DateOfBirth') @Temporal(TemporalType.TIMESTAMP) private Date dateOfBirth; @Column(name = 'MaritalStatus') private String maritalStatus; @Column(name = 'Occupation') private String occupation; @Column(name = 'AnnualIncome') private String annualIncome; @Column(name = 'BloodGroup') private String bloodGroup; @Column(name = 'Email') private String email; @Column(name = 'ModeOfPayment') private String modeOfPayment; @Column(name = 'ModeOfPaymentAlt') private String modeOfPaymentAlt; @Column(name = 'ExtPrimaryPhysicianName') private String extPrimaryPhysicianName; @Column(name = 'ExtPrimaryPhysicianPhoneNumber') private String extPrimaryPhysicianPhoneNumber; @Column(name = 'IsDeleted') private Boolean isDeleted; @Column(name = 'Meta_CreatedByUser') private String metaCreatedByUser; @Column(name = 'Meta_UpdatedDT') @Temporal(TemporalType.TIMESTAMP) private Date metaUpdatedDT; @Column(name = 'Meta_CreatedDT') @Temporal(TemporalType.TIMESTAMP) private Date metaCreatedDT; public Patientinfo() { } public Patientinfo(Long patientKey) {this.patientKey = patientKey; } public Long getPatientKey() {return patientKey; } public void setPatientKey(Long patientKey) {this.patientKey = patientKey; } public String getPatientMRNumber() {return patientMRNumber; } public void setPatientMRNumber(String patientMRNumber) {this.patientMRNumber = patientMRNumber; } public BigInteger getIntPrimaryPhysicianKey() {return intPrimaryPhysicianKey; } public void setIntPrimaryPhysicianKey(BigInteger intPrimaryPhysicianKey) {this.intPrimaryPhysicianKey = intPrimaryPhysicianKey; } public String getFirstName() {return firstName; } public void setFirstName(String firstName) {this.firstName = firstName; } public String getMiddleName() {return middleName; } public void setMiddleName(String middleName) {this.middleName = middleName; } public String getLastName() {return lastName; } public void setLastName(String lastName) {this.lastName = lastName; } public Short getAge() {return age; } public void setAge(Short age) {this.age = age; } public String getGender() {return gender; } public void setGender(String gender) {this.gender = gender; } public String getNationality() {return nationality; } public void setNationality(String nationality) {this.nationality = nationality; } public Date getDateOfBirth() {return dateOfBirth; } public void setDateOfBirth(Date dateOfBirth) {this.dateOfBirth = dateOfBirth; } public String getMaritalStatus() {return maritalStatus; } public void setMaritalStatus(String maritalStatus) {this.maritalStatus = maritalStatus; } public String getOccupation() {return occupation; } public void setOccupation(String occupation) {this.occupation = occupation; } public String getAnnualIncome() {return annualIncome; } public void setAnnualIncome(String annualIncome) {this.annualIncome = annualIncome; } public String getBloodGroup() {return bloodGroup; } public void setBloodGroup(String bloodGroup) {this.bloodGroup = bloodGroup; } public String getEmail() {return email; } public void setEmail(String email) {this.email = email; } public String getModeOfPayment() {return modeOfPayment; } public void setModeOfPayment(String modeOfPayment) {this.modeOfPayment = modeOfPayment; } public String getModeOfPaymentAlt() {return modeOfPaymentAlt; } public void setModeOfPaymentAlt(String modeOfPaymentAlt) {this.modeOfPaymentAlt = modeOfPaymentAlt; } public String getExtPrimaryPhysicianName() {return extPrimaryPhysicianName; } public void setExtPrimaryPhysicianName(String extPrimaryPhysicianName) {this.extPrimaryPhysicianName = extPrimaryPhysicianName; } public String getExtPrimaryPhysicianPhoneNumber() {return extPrimaryPhysicianPhoneNumber; } public void setExtPrimaryPhysicianPhoneNumber(String extPrimaryPhysicianPhoneNumber) {this.extPrimaryPhysicianPhoneNumber = extPrimaryPhysicianPhoneNumber; } public Boolean getIsDeleted() {return isDeleted; } public void setIsDeleted(Boolean isDeleted) {this.isDeleted = isDeleted; } public String getMetaCreatedByUser() {return metaCreatedByUser; } public void setMetaCreatedByUser(String metaCreatedByUser) {this.metaCreatedByUser = metaCreatedByUser; } public Date getMetaUpdatedDT() {return metaUpdatedDT; } public void setMetaUpdatedDT(Date metaUpdatedDT) {this.metaUpdatedDT = metaUpdatedDT; } public Date getMetaCreatedDT() {return metaCreatedDT; } public void setMetaCreatedDT(Date metaCreatedDT) {this.metaCreatedDT = metaCreatedDT; } @Override public int hashCode() {int hash = 0;hash += (patientKey != null ? patientKey.hashCode() : 0);return hash; } @Override public boolean equals(Object object) {// TODO: Warning - this method won’t work in the case the id fields are not setif (!(object instanceof Patientinfo)) { return false;}Patientinfo other = (Patientinfo) object;if ((this.patientKey == null && other.patientKey != null) || (this.patientKey != null && !this.patientKey.equals(other.patientKey))) { return false;}return true; } @Override public String toString() {return 'com.app.ehr.entities.Patientinfo[ patientKey=' + patientKey + ' ]'; }}