java.lang.NumberFormatException:对于输入字符串:“id”

时间:2014-02-23 10:09:07

标签: java spring jsp

我正在使用SPRING MVC开发一个项目来显示JSP文件中的用户列表。我的Controller文件有:

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”。有人可以帮忙找出解决方案吗?

非常感谢。

4 个答案:

答案 0 :(得分:1)

在尝试将字符串转换为数字失败时发生

NumberFormatException。检查作为数字的任何输入数据是否实际上正在接收不同的内容(例如:空字符串,无法转换为数字,可能是原因)。

答案 1 :(得分:0)

第一个好的规则:包含你可以命名复数的列表的变量,例如,用户列表名称为“users”:

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

现在你知道变量包含什么,“users”有用户列表,但“user”是用户列表中的一项。

第二条规则:如果要检查,变量是否为数字,不捕获异常,则速度很慢。正则表达式更好更快:

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

答案 2 :(得分:0)

除了holdrarocha和Damien的答案之外,我认为你的问题是你在将ID添加到User对象之前没有检查ID。

确保User中的id变量是整数(或long或其他)。这样,如果从数据库中填充它,您的行映射器将添加数值。

如果它是一个字符串,请确保进入的是数字。

检查String是否为数字的简单方法是用户Apache Commons StringUtils isNumeric方法:

http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html#isNumeric(java.lang.String)

答案 3 :(得分:0)

我不确定你的问题是什么,但我记得把下面的代码放在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" %>