1

電話番号を渡すフォーム送信から NumberFormat 例外を取得します。ただし、渡される数値は実際には数値であり、サーブレット内で int に変換します。エラー メッセージ内で、int が - 8456640236 に入力されたことがわかります。

サーブレット メソッド

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)
4

4 に答える 4

4

解析しようとしている値は、Integer保持できる2 31 -1よりも大きく、 2147483647 です。

代わりにLong(または) にして、それを解析するために使用する必要があります。longLong#parseLong()

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

この具体的な問題は、JSP/サーブレットとは何の関係もありませんが、基本的な Javaとは何の関係もないことに注意してください。メソッドとハードコードされた値を持つプレーンなバニラ Java クラスでこれを行うと、まったく同じ問題が発生しmain()ます (問題を特定するのは簡単でした)。

于 2012-09-09T23:40:20.093 に答える
0

簡単に言えば、電話番号には int/long ではなく String を使用することをお勧めします。その理由として、一部のユーザーは電話番号を「-」で区切って入力することを好みます。また、将来、ユーザーに電話番号とともに ISD コードと標準コードも入力するように求める場合は、より長い番号をサポートする必要があります。データ型の間違った側にいる可能性があります。また、ユーザーに ISD コードの入力を求める場合、ユーザーはその前に「+」を付ける傾向があります。

ただし、これについては、プロジェクトの要件を確認する必要があります。

それが役立つことを願っています。

于 2012-09-10T04:48:18.570 に答える