为了账号安全,请及时绑定邮箱和手机立即绑定

JSP中List中的$ {employee.id}抛出java.lang.NumberFormat

/ 猿问

JSP中List中的$ {employee.id}抛出java.lang.NumberFormat

HUH函数 2019-11-04 13:55:34

我有一个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);

}

List<Employee>从下面的方法显示时,同一JSP会引发异常。


@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)

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



查看完整描述

1 回答

?
守候你守候我

您的getAllEmployees(searchName)方法不会返回List<Employee>,而是返回List<Object[]>。最有可能是由编译器生成的“未检查的强制转换”警告,您忽略或禁止了它。


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


要解决此问题,您有两种选择:


修复getAllEmployees(searchName)返回实数 的方法List<Employee>。通常,这是通过Employee直接查询实体而不是单个列/字段来完成的。


更换所有不正确的List<Employee>通过声明List<Object[]>和在EL处理它作为一个对象数组像这样${employee[0]},${employee[1]}等


查看完整回答
反对 回复 2019-11-04
  • 1 回答
  • 0 关注
  • 35 浏览
我要回答

相关问题推荐

慕课专栏
更多

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信