我正在使用SPRING MVC来开发一个项目,以在JSP文件中显示用户列表。我的控制器文件包含:
Map<String, Object> model = new HashMap<String, Object>();
model.put("user", userService.getUser()); //userService.getUser() returns a List
JSP文件具有:
<c:if test="${!empty user}">
<table>
<tr>
<td>User Id</td>
<td>First Name</td>
<td>Last Name</td>
<td>Gender</td>
<td>City</td>
</tr>
<c:forEach items="${user}" var="user">
<tr>
<td><c:out value="${user.id}"/></td>
<td><c:out value="${user.firstName}"/></td>
<td><c:out value="${user.lastName}"/></td>
<td><c:out value="${user.gender}"/></td>
<td><c:out value="${user.city}"/></td>
</tr>
</c:forEach>
</table>
</c:if>
显示上述JSP文件时,java.lang.NumberFormatException:对于输入字符串:显示“id”。有人能帮忙找出解决方案吗?
非常感谢您的光临。
5条答案
按热度按时间btqmn9zl1#
NumberFormatException
。请检查您的任何输入数据(应该是数字)是否实际收到不同的数据(例如:空字符串,不能转换为数字,这是一个可能的原因)。5jdjgkvh2#
第一条好规则:包含列表的变量应使用复数命名,例如,用户列表将名称设置为“users”:
现在你知道变量包含什么了,“users”有用户列表,但是“user”是用户列表中的一项。
第二条规则:如果你想检查一个变量是否是一个数字,不要捕捉异常,它很慢。更好更快的是regex:
4jb9z9bj3#
除了heldrarocha和Damien的答案之外,我认为您的问题是在将ID添加到User对象之前没有检查它。
确保User中的id变量是一个整数(或长整型或其他类型)。这样,如果你从DB中填充它,你的行Map器将添加数值。
如果它必须是一个字符串,确保进入的任何内容都是数字。
检查字符串是否为数值的一个简单方法是使用Apache Commons StringUtils isNumeric方法:
(请参见第一章)
ntjbwcob4#
我不确定你的问题是什么,但我记得在jsp页面的开头放了下面的代码
iezvtpos5#
由于您确保了userService.getUser()返回一个列表,可以在jsp中使用forEach迭代该列表,因此我想到的唯一更改是
和jsp文件,如下所示:
它可以消除歧义,实际上可以解决你的问题。
今天我遇到了同样的问题,后来我意识到当我打算迭代一个这样的对象列表时,我是在迭代对象本身。