2014-02-23 105 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)

相關問題