Spring MVC:Bean属性不可读或getter方法无效getter的返回类型是否与setter的参数类型匹配

时间:2014-04-22 21:15:14

标签: java hibernate jsp spring-mvc

我是Spring MVC的新手,我在我的应用程序中遇到问题,我一直在尝试用我的数据库中的信息填充一个下拉框但是我在JSP中遇到错误,我得到了所有的信息。控制器,但我不能在视图中显示它,我在网站上发现了类似的情况,但没有一个我可以使用的答案。

无论我尝试什么,我都会遇到同样的错误,例外情况如下:

org.springframework.beans.NotReadablePropertyException: Invalid property 'nombreEstado' of bean class [java.util.ArrayList]: Bean property 'nombreEstado' 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.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:725)
org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:716)
org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:149)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:188)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:154)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:117)
org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:422)
org.springframework.web.servlet.tags.form.SelectTag.writeTagContent(SelectTag.java:194)
org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:84)
org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:80)
org.apache.jsp.WEB_002dINF.views.home_jsp._jspService(home_jsp.java:141)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:209)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:267)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1225)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1012)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52

现在我在我的控制器中有这个方法:

@ModelAttribute("estados")
public List<Estado> obtenerEstados(){
    logger.debug("buscando todos los estados");

    for (int i = 0; i < this.estadoBo.obtenerEstados().size(); i++) {
        System.out.println(this.estadoBo.obtenerEstados().get(i).getNombreEstado());
    }

    return this.estadoBo.obtenerEstados();
}

我使用循环来查看值是否来自数据库

和JSP

<form:form modelAttribute="estados">
    <form:select path="nombreEstado" id="nombreEstado">
        <form:option value="">Estado: </form:option>
        <c:forEach items="${estados.getNombreEstado}" var="estado">
            <form:option value="${estado}">${estado}</form:option>
        </c:forEach>
    </form:select>

我在选择路径的行中得到错误=&#34; nombreEstado&#34;

我不知道自己做错了什么,欢迎任何帮助

先谢谢

1 个答案:

答案 0 :(得分:0)

jsp保持这样:

<form:form modelAttribute="searchForm">
                <form:select path="nombreEstado" id="nombreEstado">
                    <form:option value="">Estado: </form:option>
                    <c:forEach items="${estados}" var="estado">
                        <form:option value="${estado}">${estado}</form:option>
                    </c:forEach>
                </form:select>

我从项目中删除了getEstado属性,并从控制器中执行了以下更改:

@ModelAttribute("estados")
public List<String> obtenerEstados(){
    logger.debug("buscando todos los estados");

    int cantidadEstados = this.estadoBo.obtenerEstados().size();        
    ArrayList<String> estadoLista = new ArrayList<String>();

    for (int i = 0; i < cantidadEstados; i++) {
        estadoLista.add(this.estadoBo.obtenerEstados().get(i).getNombreEstado());           
    }               
    return estadoLista;             
}

这就是我遇到问题的地方:

@ModelAttribute("estados")
public List<String> obtenerEstados(){
    logger.debug("buscando todos los estados");

    int cantidadEstados = this.estadoBo.obtenerEstados().size();        
    ArrayList<String> estadoLista = new ArrayList<String>();

    for (int i = 0; i < cantidadEstados; i++) {
        estadoLista.add(this.estadoBo.obtenerEstados().get(i).getNombreEstado());           
    }               
    return estadoLista;             
}

我使用新的bean对象将属性searchForm添加到模型中,现在它可以正常工作