2016-10-25 99 views
0

我看到它的已知问题,但解决方案发布不能解决我的问题。我尝试部署我的第一个休眠应用程序,我得到以下异常:Bean类的无效属性'id'[java.lang.Class] SpringMVC + Hibernate

ERROR: org.springframework.web.servlet.tags.form.LabelTag - Invalid property 'id' of bean class [java.lang.Class]: Bean property 'id' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter? 
org.springframework.beans.NotReadablePropertyException: Invalid property 'id' of bean class [java.lang.Class]: Bean property 'id' 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:725) 
    at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:716) 
    at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:149) 
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168) 
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:188) 
    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:84) 
    at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:80) 
    at org.apache.jsp.WEB_002dINF.views.person_jsp._jspx_meth_form_005flabel_005f0(person_jsp.java:334) 
    at org.apache.jsp.WEB_002dINF.views.person_jsp._jspx_meth_c_005fif_005f0(person_jsp.java:291) 
    at org.apache.jsp.WEB_002dINF.views.person_jsp._jspx_meth_form_005fform_005f0(person_jsp.java:208) 
    at org.apache.jsp.WEB_002dINF.views.person_jsp._jspService(person_jsp.java:135) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:747) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:485) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:410) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:337) 
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:209) 
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:267) 
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1217) 
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1005) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:952) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:624) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1083) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:640) 
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2517) 
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2506) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

这些文件的内容我们关注:

person.jsp

<c:url var="addAction" value="/person/add" ></c:url> 

<form:form action="${addAction}" commandName="person"> 
    <table> 
     <c:if test="${!empty person.name}"> 
      <tr> 
       <td> 
        <form:label path="id"> // <-- this line causes exception 
         <spring:message text="ID"/> 
        </form:label> 
       </td> 
       <td> 
        <form:input path="id" readonly="true" size="8" disabled="true" /> 
        <form:hidden path="id" /> 
       </td> 
      </tr> 
     </c:if> 

Person.java - 我的实体

package com.crudvoid.model; 

import lombok.Data; 

import javax.persistence.*; 

@Data 
@Entity 
@Table(name = "Person") 
public class Person { 

    @Id 
    @Column(name = "id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 

    private String name; 

    private String country; 
    } 

PersonController.java

package com.crudvoid; 

import com.crudvoid.model.Person; 
import com.crudvoid.service.PersonService; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Qualifier; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.PathVariable; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

@Controller 
public class PersonController { 
    private PersonService personService; 

    @Autowired(required = true) 
    @Qualifier(value = "personService") 
    public void setPersonService(PersonService personService) { 
     this.personService = personService; 
    } 

    @RequestMapping(value = "/person", method = RequestMethod.GET) 
    public String listPersons(Model model) { 
     model.addAttribute("person", Person.class); 
     model.addAttribute("listPersons", this.personService.listPersons()); 

     return "person"; 
    } 

    @RequestMapping(value = "/person/add", method = RequestMethod.POST) 
    public String addPerson(@ModelAttribute("person") Person person) { 
     if(person.getId() == 0) { 
      this.personService.addPerson(person); 
     } 
     else { 
      this.personService.updatePerson(person); 
     } 

     return "redirect:/person"; 
    } 

    @RequestMapping("/remove/{id}") 
    public String removePerson(@PathVariable("id") int id) { 
     this.personService.removePerson(id); 

     return "redirect:/person"; 
    } 

    @RequestMapping("/edit/{id}") 
    public String editPerson(@PathVariable("id") int id, Model model) { 
     model.addAttribute("person", this.personService.getPersonById(id)); 
     model.addAttribute("listPersons", this.personService.listPersons()); 

     return "person"; 
    } 
} 

就是这样,我想。如有必要,我会发布更多信息。我很生气,试图弄清楚什么是错的一整天。请帮忙!

它不是setter/getter,我使用了在编译期间创建(不仅)setter和getters的Lombok插件。

干杯,无效

+1

更换线

 model.addAttribute("person", Person.class); 

listPersons()我不明白你正在尝试做'model.addAttribute(“person”,Person.class);'PersonController'中的行。你有没有意思'model.addAttribute(“person”,new Person());'而不是? –

+0

这解决了我的问题......谢谢:) – voidmat

回答

2

从意见,解决方法也和

 model.addAttribute("person", new Person()); 
相关问题