2012-09-09 115 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码时,用户往往以“+”作为前缀。

虽然为此,您将不得不检查您的项目需求。

希望有所帮助。