2014-02-23 106 views
1

我正在使用SPRING MVC开发一个项目以显示JSP文件中的用户列表。我的控制器文件具有:java.lang.NumberFormatException:对于输入字符串:“id”

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” 被示出。任何人都可以帮忙找出解决方案吗?

非常感谢。

+1

你可以张贴整个异常堆栈追踪? –

+0

'items =“$ {user}”var =“user”'哪个用户是什么..用'var =“u”'代替'并使用'foreach'中的'u'可能有帮助 – 2014-02-23 10:13:39

+0

我知道这个答案很漂亮但是我相信''foreach'中的'user'变量是_actually_集合。检查出。 – kazbeel

回答

1

NumberFormatException发生在尝试将字符串转换为数字失败期间。检查你的输入数据是否应该是一个数字实际上是接收不同的数据(例如:一个空字符串,它不能被转换为数字,是一个可能的原因)。

0

首先好的规则:包含您schould命名复数例如列表变量,用户列表把名“用户”:

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

现在你知道含有什么变化,“用户”有用户,但名单“用户“是一项用户列表。

第二条规则:如果你想检查,一个变量是否是一个数字,不要捕捉异常,它很慢。更好更快是正则表达式:

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

除了heldrarocha和达米安的答案,我觉得你的问题是,你是不是将它添加到用户对象之前检查ID。

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

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

一个简单的方法来检查一个字符串是否是数字是用户阿帕奇百科全书StringUtils的ISNUMERIC方法:

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

相关问题