JSP java.lang.NumberFormatException:对于输入字符串:“识别码”

n6lpvg4x  于 2022-12-07  发布在  Java
关注(0)|答案(5)|浏览(111)

我正在使用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”。有人能帮忙找出解决方案吗?
非常感谢您的光临。

btqmn9zl

btqmn9zl1#

NumberFormatException。请检查您的任何输入数据(应该是数字)是否实际收到不同的数据(例如:空字符串,不能转换为数字,这是一个可能的原因)。

5jdjgkvh

5jdjgkvh2#

第一条好规则:包含列表的变量应使用复数命名,例如,用户列表将名称设置为“users”:

<c:forEach items="${users}" var="user">

现在你知道变量包含什么了,“users”有用户列表,但是“user”是用户列表中的一项。
第二条规则:如果你想检查一个变量是否是一个数字,不要捕捉异常,它很慢。更好更快的是regex:

if (anyString.matches("\\d+")){
    isANumber();
}
else{
    notNumber();
}
4jb9z9bj

4jb9z9bj3#

除了heldrarocha和Damien的答案之外,我认为您的问题是在将ID添加到User对象之前没有检查它。
确保User中的id变量是一个整数(或长整型或其他类型)。这样,如果你从DB中填充它,你的行Map器将添加数值。
如果它必须是一个字符串,确保进入的任何内容都是数字。
检查字符串是否为数值的一个简单方法是使用Apache Commons StringUtils isNumeric方法:
(请参见第一章)

ntjbwcob

ntjbwcob4#

我不确定你的问题是什么,但我记得在jsp页面的开头放了下面的代码

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
iezvtpos

iezvtpos5#

由于您确保了userService.getUser()返回一个列表,可以在jsp中使用forEach迭代该列表,因此我想到的唯一更改是

model.put("users", userService.getUser())

和jsp文件,如下所示:

<c:forEach items="${users}" var="user">

它可以消除歧义,实际上可以解决你的问题。
今天我遇到了同样的问题,后来我意识到当我打算迭代一个这样的对象列表时,我是在迭代对象本身。

相关问题