You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Web项目JSP页面抛出java.lang.NumberFormatException错误的解决求助

解决Java Web中HTTP 500错误(NumberFormatException: "For input string: "titre"")

咱们直接从堆栈跟踪里抓关键信息:错误出在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:27:53