2013-12-16 3 views
15

Я новичок в Spring MVC. У меня застряла ошибка при запуске моего проекта Ошибка. Запрос, отправленный клиентом, был синтаксически неправильным. У меня есть объект класса PatientInfo. Моя страница jsp - demo1. Мой контроллер - это контроллер пациента. Функциональность, которую я хочу реализовать, - это вставка значений в базу данных. Но я не могу назвать свою функцию (add-update2) в контроллере.Запрос, отправленный клиентом, был синтаксически неправильным.-Spring MVC + JDBC Template

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"; 
    } 
} 

Entity class- 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 + " ]"; 
    } 

} 
+0

Вы видите вывод 'System.out.println (" --------------------------------- -------- От контроллера ---------------------------------------- -------- ");'? –

+0

Нет. Я не вижу этого. Я думаю, что моя ошибка связана с аннотацией атрибута @Model. –

ответ

25

Я думаю, что проблема в том, что весна не знает, как десериализации даты вашего браузер клиент посылает при подаче следующей 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="../images/cal.gif" width="16" height="16" border="0" alt="Click Here to Pick up the timestamp"></a> 
    </td> 
</tr> 

весны не знает, как взять значение, которое вы вводите в это поле, и преобразовать его в объект 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, ни один из исходных параметров формы, которые вы отправили, изначально не существует. Вы должны подумать, как вы это делаете.

+0

Спасибо большое. Он работал. –

+0

Я получал подобное сообщение, но оказалось, что объект модели, который я проходил (мой эквивалент Patientinfo patientInfo), отсутствовал. – TimeTrap

+0

спасибо, что это сработало как шарм –

0

попробовать с этим (с /add-update2 вместо просто add-update2) и заменить modelAttribute на commandName

<form:form commandName="patientInfo" method="POST" action="/add-update2"> 
+0

№ Показывает ошибку --- Запрошенный ресурс недоступен. –

+0

обновил мой ответ –

+0

'commandName' и' modelAttribute' - это одно и то же поле. См. Http://stackoverflow.com/questions/21495616/difference-between-modelattribute-and-commandname-atributes-in-form-tag-in-sprin –

2

Сегодня утром я столкнулся с такой же ошибкой. Проблема с моим кодом заключалась в том, что я объявила переменную как целое число в объекте привязки формы, но в реальной форме я собирал текст. Изменение переменной на правильный тип, разработанный для меня

3

Это происходит, когда определенная привязка не соответствует тому, что отправляет пользователь. Наиболее распространенные вопросы:

  • Отсутствующие PathVariable декларации
  • Неполная PathVariable декларации (например, отсутствует значение = "имяПеременной")
  • Неверный тип данных, например, Sotirios Delimanolis ответ выше.Если класс входного параметра не может быть сериализовать запрос не перерабатываемый

Таким образом, в общем, быть уверенным, что:

  • Каждый PathVariable объявляется
  • присваивается значение, которое соответствует значение должно совпадать по пути - @PathVariable(value="myVariableName", String myVariable), где путь определяет @RequestMapping(value = "/userInfo/myVariableName", method = RequestMethod.GET)
  • Каждый класс, объявленный для PathVariable, должен быть сериализуемым.
0

В моем случае я пытаюсь создать объект с идентификатором и именем в качестве атрибутов. ID - int, NAME - строка. Но мои JS установленные значения как этот ID = '', NAME = 'brabrabra ...'

После множества ID = 0, проблема решена.

Смежные вопросы