【问题标题】:java.lang.NumberFormatException: For input string: "id"java.lang.NumberFormatException:对于输入字符串:“id”
【发布时间】:2014-02-23 10:09:06
【问题描述】:

我正在使用 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: For input string: "id"。有人可以帮忙找出解决办法吗?

非常感谢。

【问题讨论】:

  • 你能发布整个异常堆栈跟踪吗?
  • items="${user}" var="user" which user is what.. 用var="u" 替换并在foreach 中使用u 可能会有所帮助
  • 我知道这个答案来得很晚,但我相信foreach 中的user 变量实际上 是一个集合。检查一下。

标签: java spring jsp


【解决方案1】:

NumberFormatException 发生在尝试将字符串转换为数字失败的过程中。检查您的任何应该是数字的输入数据是否实际上接收到不同的东西(例如:一个可能的原因是一个无法转换为数字的空字符串)。

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      如果必须是字符串,请确保输入的内容是数字。

      检查字符串是否为数字的一种简单方法是使用 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)

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 您好!如果您可以使用代码标签格式化代码以获得更好的可读性,那就太好了!谢谢。
        猜你喜欢
        • 2018-04-01
        • 2012-12-05
        • 2013-09-04
        • 1970-01-01
        • 1970-01-01
        • 2020-01-01
        相关资源
        最近更新 更多