You need to enable JavaScript to run this app. JSP传参到Servlet抛出java.lang.NumberFormatException异常如何解决
优惠活动
大模型
产品
解决方案
定价
更多

JSP传参到Servlet抛出java.lang.NumberFormatException异常如何解决

问题根源

你遇到的NumberFormatException异常并非出现在你贴出的Servlet代码中,而是来自你转发到的ChannelDoctorForm.jsp页面的EL表达式写法错误。
从错误栈的javax.el.ListELResolver.toInteger调用记录可以看到:EL解析器在处理你存入request的list属性时,尝试把字符串"name"转换为整数作为列表的索引下标,转换失败才抛出了该异常。

错误原因

你在Servlet中存入request的list是List集合类型,如果你在JSP中直接写${list.name},EL的列表解析器会默认将.name后的name识别为列表的索引值,才会尝试做字符串转整数的操作,自然会转换失败。

解决方案

根据你的使用场景选对应修改方式即可:

  1. 如果你只需要取列表中第一个Staff对象的name属性,将JSP中的EL表达式修改为:
${list[0].name}

先通过下标取到列表中的Staff对象,再读取它的name属性。

  1. 如果你需要遍历整个列表输出所有Staff的信息,使用JSTL的forEach标签遍历:
<!-- 页面顶部先引入JSTL核心标签库 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!-- 遍历列表 -->
<c:forEach items="${list}" var="staff">
    <p>医生姓名:${staff.name}</p>
</c:forEach>
  1. 如果你实际只需要传递单个Staff对象,不需要用列表存储,可以直接修改Servlet代码:
// 删掉List相关代码,直接存单个对象
Staff doc= new Staff();
doc.setName(name);
request.setAttribute("doc", doc);

之后在JSP中直接读取对象属性即可,不会触发列表解析的问题:

${doc.name}

额外优化建议

你当前声明List时没有指定泛型,建议修改为List<Staff> list = new ArrayList<>();,可以避免后续出现不必要的类型转换异常。

内容的提问来源于stack exchange,提问作者Ryan anjelo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 06:45:04