spring - JSP 中 List 中的 ${employee.id} 抛出 java.lang.NumberFormatException : For input string: "id"

标签 spring hibernate jsp spring-mvc el

我有一个 JSP 页面,它在显示 List<Employee> 时工作正常从下面的方法中 <c:forEach> .

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

而相同的 JSP 在显示 List<Employee> 时抛出异常从下面的方法。
@RequestMapping("searchEmployee")
public ModelAndView searchEmployee(@RequestParam("searchName") String searchName) {
    // logger.info("Searching the Employee. Employee Names: " + searchName);
    List<Employee> employeeList = employeeService.getAllEmployees(searchName);
    System.err.println("Employee count = "+employeeList.size());
    return new ModelAndView("employeeList", "employeeList", employeeList);
}

这是堆栈跟踪:
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)

这是怎么引起的,我该如何解决?

最佳答案

您的 getAllEmployees(searchName)方法不返回 List<Employee> ,但是一个 List<Object[]> .很可能还有编译器生成的“未经检查的强制转换”警告,您忽略或抑制了该警告。

证据是javax.el.ArrayELResolver的参与在堆栈跟踪中。这仅在 EL 表达式的基础是数组类型时才涉及。如果你真的有一个 Employee而不是 Object[] ,那么您会期望 javax.el.BeanELResolver在 EL 表达式 ${employee.id} 所在的特定堆栈跟踪行是要评估的。如 ${employee}在您的情况下实际上是一个数组,EL 将解释 id属性作为数组索引,然后尝试将其解析为 Integer ,但正如您在堆栈跟踪的顶行所看到的那样,未能这样做。

要解决此问题,您有 2 个选择:

  • 修复 getAllEmployees(searchName)方法返回 真实 List<Employee> .通常,这是通过查询 Employee 来完成的。实体直接而不是单独的列/字段。
  • 替换所有不正确的 List<Employee>声明 List<Object[]>并在 EL 中将其作为对象数组处理,就像这样 ${employee[0]} , ${employee[1]}
  • 关于spring - JSP 中 List 中的 ${employee.id} 抛出 java.lang.NumberFormatException : For input string: "id",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35413698/

    相关文章:

    spring - 找不到依赖项的 [org.hibernate.SessionFactory] ​​类型的匹配 bean

    sql - Hibernate 创建、不更新、不删除。

    jsp - 如何添加自定义 Sling 绑定(bind)?

    java - 为什么我会收到 bean 'com.mypackage.service.blog.BlogService' 的 NoSuchBeanDefinitionException

    java - 如何在 hibernate 中正确设置双向关联@OneToMany

    java - hibernate : An association from the table application_category refers to an unmapped class: allin. beans1.Application

    java - 使用 JSP 编写一个小部件生成器以在其他 servlet 中使用

    java - Spring 将单例 bean 注入(inject)原型(prototype) bean 导致单例重新创建

    java - 如何配置 Spring AOP 以使用 AspectJ

    java - 如何从java类中调用jsp