Spring MVC es nuevo para mí. Me gustaría tener algunos integral de la literatura con el ejemplo sobre Spring MVC(incluso oficial docs no son fáciles de entender).

Por lo que el problema que enfrentamos es:

Jun 15, 2013 2:42:36 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [appServlet] in context with path [/controller] threw exception [An exception occurred processing JSP page /WEB-INF/views/index.jsp at line 27
24: 
25: <form:form  commandName="creationDate" method="GET" action="add">
26: 
27: <form:label path="creationDate.ParticularDate">Particular Date</form:label>
28: <form:input path="creationDate.ParticularDate" />
29: 
30: <form:label path="creationDate.childGoSchoolDate">Child go to School</form:label>
Stacktrace:] with root cause
org.springframework.beans.NotReadablePropertyException: Invalid property 'creationDate' of bean class [edu.demidov.dom.CreationDate]: Bean property 'creationDate' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:707)
at org.springframework.beans.BeanWrapperImpl.getNestedBeanWrapper(BeanWrapperImpl.java:554)
at org.springframework.beans.BeanWrapperImpl.getBeanWrapperForPropertyPath(BeanWrapperImpl.java:531)
at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:697)
at org.springframework.validation.AbstractPropertyBindingResult.getActualFieldValue(AbstractPropertyBindingResult.java:99)
at org.springframework.validation.AbstractBindingResult.getFieldValue(AbstractBindingResult.java:218)
at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:120)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:179)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:199)
at org.springframework.web.servlet.tags.form.LabelTag.autogenerateFor(LabelTag.java:130)
at org.springframework.web.servlet.tags.form.LabelTag.resolveFor(LabelTag.java:120)
at org.springframework.web.servlet.tags.form.LabelTag.writeTagContent(LabelTag.java:90)
at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:103)
at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:80)
at org.apache.jsp.WEB_002dINF.views.index_jsp._jspx_meth_form_005flabel_005f0(index_jsp.java:184)
at org.apache.jsp.WEB_002dINF.views.index_jsp._jspx_meth_form_005fform_005f0(index_jsp.java:128)
at org.apache.jsp.WEB_002dINF.views.index_jsp._jspService(index_jsp.java:88)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:264)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)

¿Por qué sucede? No entiendo por qué me dice que no tengo adecuada setter y getter método para la Entidad, y no creo que tengo que definir en mi clase de controlador. Estoy en lo cierto?

Mi controlador:

@Autowired
private ControllerSupportClass controllerSupportClass; 
public void setControllerSupportClass(
ControllerSupportClass controllerSupportClass) {
this.controllerSupportClass = controllerSupportClass;
}
@RequestMapping(value ="/index", method=RequestMethod.GET)
public ModelAndView firstPage(Model model) {
CreationDate creationDate = new CreationDate();
model.addAttribute("creationDate", creationDate);
return new ModelAndView("index");
}
@RequestMapping(value ="/result", method=RequestMethod.GET)
public String SecondActionPage(@RequestParam String particularDate, 
@RequestParam String nameOfInstitution, 
@RequestParam String typeName, 
Model model) throws Exception {
if(particularDate !="" && nameOfInstitution !="" && typeName=="") {
controllerSupportClass.findWithDateAndName(nameOfInstitution, particularDate, model);
} else if(particularDate !="" && nameOfInstitution =="" && typeName !="") {
controllerSupportClass.findWithAddedDateAndType(typeName, particularDate, model);
} else if(particularDate !="" && nameOfInstitution =="" && typeName==""){
controllerSupportClass.findWithAddedDate(particularDate, model);
} else if(particularDate !="" && nameOfInstitution !="" && typeName !="") {
throw new Exception("Search by choose all parameters is not exceptable");
} else {
throw new Exception("You didn't put any search parameters");
}
return "result";
}
@RequestMapping(value="/add", method=RequestMethod.GET)
public String addingData(@ModelAttribute("creationDate") CreationDate creationDate, BindingResult result, Model model) {
controllerSupportClass.saveDataToDataBase(creationDate);
return "add";
}
}

Y mi jsp:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="utf-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Sorting page</title>
</head>
<body>
<h3>Insert data:</h3>
<form:form  commandName="CreationDate" method="GET" action="add">
<form:label path="creationDate.particularDate">Particular Date</form:label>
<form:input path="creationDate.particularDate" />
<form:label path="creationDate.childGoSchoolDate">Child go to School</form:label>
<form:input path="creationDate.childGoSchoolDate"/>
<form:label path="creationDate.childAdmissionDate">Child admission Date</form:label>
<form:input path="creationDate.childAdmissionDate"/>
<input type="submit" value="Save"/>
</form:form>
</body>
</html>

Sí, mis campos creationdate Entidad:

@Entity
@Table(name="CREATION_DATE")
@NamedQueries ({
@NamedQuery(name="creationDate.findById", query="select distinct c from CreationDate c left join fetch c.institution n " +
"left join fetch c.scheduleRotationChild s where c.dateId= :i")
})
public class CreationDate implements Serializable {
private static final long serialVersionUID = 1648102358397071136L;
private int dateId;
@Id
@GeneratedValue(strategy=IDENTITY)
@Column(name="DATE_ID")
public int getDateId() {
return dateId;
}
public void setDateId(int dateId) {
this.dateId = dateId;
}
private Date particularDate;
@Column(name="PARTICULAR_DATE")
public Date getParticularDate() {
return particularDate;
}
public void setParticularDate(Date particularDate) {
this.particularDate = particularDate;
}
private int version;
@Version
@Column(name="VERSION")
public int getVersion() {
return version;
}
public void setVersion(int version) {
this.version = version;
}
private Date childGoSchoolDate;
@Temporal(TemporalType.DATE)
@Column(name="CHILD_GO_SCHOOL_DATE")
public Date getChildGoSchoolDate() {
return childGoSchoolDate;
}
public void setChildGoSchoolDate(Date childGoSchoolDate) {
this.childGoSchoolDate = childGoSchoolDate;
}
private Date childAdmissionDate;
@Temporal(TemporalType.DATE)
@Column(name="CHILD_ADMISSION_DATE")
public Date getChildAdmissionDate() {
return childAdmissionDate;
}
public void setChildAdmissionDate(Date childAdmissionDate) {
this.childAdmissionDate = childAdmissionDate;
}
private Set<Institution> institution = new HashSet<Institution>();
@ManyToMany(fetch = FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
@JoinTable(name="CREATIONDATE_INSTITUTION", 
joinColumns=@JoinColumn(name="DATE_ID"), 
inverseJoinColumns=@JoinColumn(name="INSTITUTION_ID"))
public Set<Institution> getInstitution() {
return institution;
}
public void setInstitution(Set<Institution> institutionSet) {
this.institution = institutionSet;
}
private List<ScheduleRotationChild> scheduleRotationChild = new ArrayList<ScheduleRotationChild>();
@OneToMany(fetch=FetchType.EAGER, orphanRemoval=true)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
@JoinTable(name="SRC_DATE", 
joinColumns=@JoinColumn(name="DATE_ID"),
inverseJoinColumns=@JoinColumn(name="SRC_ID"))
public List<ScheduleRotationChild> getScheduleRotationChild() {
return scheduleRotationChild;
}
public void setScheduleRotationChild(
List<ScheduleRotationChild> scheduleRotationChild) {
this.scheduleRotationChild = scheduleRotationChild;
}
public void addSetInstitutions(Set<Institution> institution) {
setInstitution(institution);
}
public void addSRC(List<ScheduleRotationChild> srcinstitution) {
setScheduleRotationChild(srcinstitution);
}
public String toString() {
return "\n" + "ID: " + dateId + " \n " 
+ "Дата: " +particularDate + " \n " 
+ "Дети идут в школу, год: " + childGoSchoolDate + " \n " 
+ "Дата приема детей: " + childAdmissionDate + "  " + scheduleRotationChild + " \n " ;
}
}

Espero que esto te aclare mi problema para ustedes. Gracias.

  • ¿Qué hace el edu.demidov.dom.Campos creationdate clase parece?
InformationsquelleAutor java_user | 2013-06-15

4 Comentarios

  1. 7

    La path valores en su form:label y form:input etiquetas en relación con el objeto de comando que se hace referencia en form:form. En otras palabras, la path valores deben ser propiedad de los nombres de la clase de la creationDate objeto. Bascially acaba de quitar el creationDate. prefijo de manera que usted termina con esto:

    <form:form  commandName="creationDate" method="GET" action="add">
    <form:label path="particularDate">Particular Date</form:label>
    <form:input path="particularDate" />
    <form:label path="childGoSchoolDate">Child go to School</form:label>

    Suponiendo que el creationDate clase tiene propiedades (con getters/setters) llamado particularDate y childGoSchoolDate.

    • Ustedes son geniales!!! Mi arco para usted. Se resuelven dos problemas de una respuesta que me enfrenté durante todo el día de hoy y se puso tan molesto… Gracias, gracias, Gracias, muchas Gracias. Chears.
  2. 1

    Dentro de la path atributo creationDate.ParticularDate probablemente debería ser creationDate.particularDate.

    Asegúrese de que su CreationDate objeto tiene una propiedad de captador método #getParticularDate().

    • Sí. Muchas gracias por la ayuda que debo ponerlo como campos creationdate.ParticularDate porque mi…() método tiene este aspecto: getParticularDate() se resuelve el problema, pero había uno diferente, no por este tema, pero realmente aprecio su ayuda: Error Ni BindingResult ni llanura objeto de destino para frijol nombre de ‘campos creationdate’ disponible como atributo de la solicitud
    • Usted no pasa de la creationDate como su atributo de modelo en el controler… Btw. usted debe comprobar superEb la respuesta así. Él es correcto, que el creationDate. no debe estar en la ruta de acceso si es que es su objeto de comando.
  3. 0

    Tuve el mismo problema pero el problema es que yo no generar los getters y setters, me escribió de forma manual. Todos mis caminos y sus métodos eran correctos. Así que me quita los métodos getter y setter que escribí manualmente y les genera el uso de eclipse. No entiendo la lógica detrás de esto, pero que se resuelve mi problema.

Dejar respuesta

Please enter your comment!
Please enter your name here