Java Web项目JSP页面抛出java.lang.NumberFormatException错误的解决求助
咱们直接从堆栈跟踪里抓关键信息:错误出在JSP第13行的<li value="${livre.titre}"></li>,抛出的NumberFormatException根源很清晰——HTML的<li>标签value属性要求是整数类型(用来定义列表项的编号值),但你传入了字符串类型的书名(titre),EL表达式尝试把这个字符串转成整数,直接触发了类型转换异常。
另外你的Servlet里还有个容易忽略的小问题:你把List<Livres>集合存到了request.setAttribute("livre", ...),变量名是单数,但实际是多本图书的集合,这会导致JSP里的取值逻辑完全混乱——你现在的JSP代码根本没遍历集合,直接取livre.titre,但livre实际是List类型,这也会埋下隐患。
具体修复步骤:
1. 修正JSP的<li>标签使用
如果你只是想显示书名,完全不需要用value属性,直接把内容放在<li>标签内部即可:
<li>${livre.titre}</li>
如果确实需要用value(比如用数据库里的图书ID作为自定义编号),确保传入的是整数类型,比如你的图书表有id字段的话,可以改成:
<li value="${livre.id}">${livre.titre}</li>
2. 调整Servlet中的集合属性名
在doGet和doPost方法里,把集合的属性名改成复数(更符合语义,避免和单个图书对象混淆):
// 原代码 request.setAttribute("livre", tableLivres.recupererLivres()); // 修改后 request.setAttribute("livres", tableLivres.recupererLivres());
3. 在JSP中正确遍历图书集合
因为你传递的是List<Livres>,需要用JSTL的<c:forEach>标签遍历所有图书(记得先导入JSTL标签库):
<%@ page pageEncoding="UTF-8" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Test</title> </head> <body> <%@ include file="menu.jsp" %> <p>Bonjour à vous !</p> <ul> <c:forEach items="${livres}" var="livre"> <li>${livre.titre}</li> </c:forEach> </ul> </body> </html>
为什么调试能拿到数据但JSP报错?
你的JDBC代码确实正确获取了数据库数据,Servlet也把集合存到了request中,但JSP渲染阶段处理<li>的value属性时,强制把字符串转成整数失败,这和数据获取逻辑无关,纯粹是前端标签的属性类型使用错误导致的。
内容的提问来源于stack exchange,提问作者chilldownhill

