我是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;
我不知道自己做错了什么,欢迎任何帮助
先谢谢
答案 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添加到模型中,现在它可以正常工作