2012-09-09 112 views
1

從傳遞電話號碼的表單提交中獲取NumberFormat異常。但是,傳遞的數字實際上是一個數字,我將它轉換爲servlet中的int。在此錯誤信息,你可以看到一個int在進入 - 8456640236.將整數傳遞給Servlet

Servlet的方法

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException 
{ 
    Contact newComment = new Contact(); 

    newComment.setName(request.getParameter("nameParameter")); 
    newComment.setEmail(request.getParameter("emailParameter")); 
    newComment.setPhone(Integer.parseInt(request.getParameter("phoneParameter"))); 
    newComment.setComment(request.getParameter("commentParameter")); 

    request.setAttribute("commentAttribute", newComment); 

    RequestDispatcher view = request.getRequestDispatcher("/successComment.jsp"); 
    view.forward(request, response); 
} 

錯誤消息

java.lang.NumberFormatException: For input string: "8456640236" 
java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) 
java.lang.Integer.parseInt(Integer.java:461) 
java.lang.Integer.parseInt(Integer.java:499) 
org.test.Servlet.doPost(Servlet.java:21) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
+0

看起來你需要一個Long值。 –

+1

電話號碼不應被視爲數字。他們是數字字符串。 –

回答

4

你試圖解析值大於Integer可容納,231-1,即2147483647.

您需要將其設置爲Long(或long),並使用Long#parseLong()來解析它。

newComment.setPhone(Long.parseLong(request.getParameter("phoneParameter"))); 

注意,這個具體問題有什麼做JSP/Servlet的,但basic Java什麼。在普通的vanilla Java類中使用main()方法和硬編碼值(這會更容易地分離問題)時,您會遇到完全相同的問題。

+0

感謝您的幫助。是的,很明顯,現在知道我的問題與jsp和servlet無關的解決方案。但是當我盯着屏幕想知道跆拳道正在進行並嘗試無數事情來解決它時,它並不那麼明顯。 – gmustudent

+0

個人沒有什麼,只是下一次的提示。嘗試投入更多時間在簡單的vanilla Java類中隔離具體問題。 – BalusC

+0

會做。再次感謝 – gmustudent

0

8456640236對於32位int太大了。嘗試把它看作是一個長而不是整數。

1

8456640236不能轉換爲32位整數,它的十六進制表示是爲0x1 F80E 16EC

如果它是一個電話號碼,爲什麼不把它作爲一個字符串?什麼是阻止用戶輸入爲「+44 12 3456 7890」或「1800 DONT CALL ME」

+0

javascript驗證 – gmustudent

+1

@gmustudent - 即使您擁有客戶端JS驗證,也會通過_Always_驗證服務器端。用戶可以繞過JS驗證。 – nnnnnn

0

在一個較輕的筆記中,我建議使用字符串而不是int/long來表示電話號碼。原因是,有些用戶更喜歡輸入以「 - 」分隔的電話號碼,如果將來您打算要求用戶輸入ISD代碼和std代碼以及電話號碼,則您將不得不支持更長的號碼,然後您最終可能會處於數據類型的錯誤一方。另外,當提示用戶輸入ISD碼時,用戶往往以「+」作爲前綴。

雖然爲此,您將不得不檢查您的項目需求。

希望有所幫助。