我是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 align="center" 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="../images/cal.gif" width="16" height="16" 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; @Controller public 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 set if (!(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 + " ]"; } }
我认为问题是,Spring不知道如何反序列化您的浏览器客户端在提交以下输入字段时发送的日期
<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="../images/cal.gif" width="16" height="16" border="0" alt="Click Here to Pick up the timestamp"></a> </td> </tr>
Spring不知道如何获取您输入该字段的值并将其转换为Date对象.您需要注册一个PropertyEditor.例如,将以下内容添加到您的@Controller类中
@InitBinder public 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时,您发送的表单输入参数最初都不存在.你应该重新考虑你如何做到这一点.
代码日志版权声明:
翻译自:http://stackoverflow.com/questions/20616319/the-request-sent-by-the-client-was-syntactically-incorrect-spring-mvc-jdbc-te