$ {employee.id} de List en JSP arroja java.lang.NumberFormatException: para cadena de entrada: “id”

Tengo una página JSP que funciona bien al mostrar List del siguiente método en a .

 @RequestMapping(value = { "getAllEmployees", "/" }) public ModelAndView getAllEmployees() { // logger.info("Getting the all Employees."); List employeeList = employeeService.getAllEmployees(); return new ModelAndView("employeeList", "employeeList", employeeList); } 

Mientras que la misma JSP arroja una excepción al mostrar List del siguiente método.

 @RequestMapping("searchEmployee") public ModelAndView searchEmployee(@RequestParam("searchName") String searchName) { // logger.info("Searching the Employee. Employee Names: " + searchName); List employeeList = employeeService.getAllEmployees(searchName); System.err.println("Employee count = "+employeeList.size()); return new ModelAndView("employeeList", "employeeList", employeeList); } 

Aquí está el rastro de la stack:

 java.lang.NumberFormatException: For input string: "id" java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) java.lang.Integer.parseInt(Integer.java:492) java.lang.Integer.parseInt(Integer.java:527) javax.el.ArrayELResolver.coerce(ArrayELResolver.java:151) javax.el.ArrayELResolver.getValue(ArrayELResolver.java:64) org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:110) org.apache.el.parser.AstValue.getValue(AstValue.java:169) org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:943) org.apache.jsp.WEB_002dINF.pages.employeeList_jsp._jspx_meth_c_005fout_005f0(employeeList_jsp.java:358) org.apache.jsp.WEB_002dINF.pages.employeeList_jsp._jspx_meth_c_005fforEach_005f0(employeeList_jsp.java:312) org.apache.jsp.WEB_002dINF.pages.employeeList_jsp._jspx_meth_c_005fif_005f1(employeeList_jsp.java:273) org.apache.jsp.WEB_002dINF.pages.employeeList_jsp._jspService(employeeList_jsp.java:162) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168) org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303) org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1228) org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

¿Cómo es esto causado y cómo puedo resolverlo?

Su getAllEmployees(searchName) no devuelve una List , sino una List . Lo más probable es que también haya una advertencia de “descarte no comprobado” generada por el comstackdor que ignoró o suprimió.

La evidencia es la participación de javax.el.ArrayELResolver en el seguimiento de la stack. Esto solo está involucrado cuando la base de una expresión EL es de un tipo de matriz. Si realmente tiene un Employee lugar de un Object[] , entonces esperaría javax.el.BeanELResolver en la línea de rastreo de la stack particular donde se evaluará la expresión EL ${employee.id} . Dado que ${employee} es en realidad un array, EL interpretará la propiedad id como un índice de matriz y luego intentará analizarlo como un Integer , pero no lo hizo como puede ver en las líneas superiores del seguimiento de la stack.

Para resolver este problema, tienes 2 opciones:

  1. getAllEmployees(searchName) método getAllEmployees(searchName) para devolver una List real List . Por lo general, esto se debe hacer consultando directamente a la entidad Employee lugar de columnas / campos invididuales.

  2. Reemplace todas las declaraciones List incorrectas por List y manipúlelas en EL como una matriz de objetos como ${employee[0]} , ${employee[1]} , etc.