1

各フィールドの検証を含むログインフォームを作成しました。送信ボタンをクリックすると、関数 validation() が呼び出されてすべてのフィールドが検証され、検証が成功すると、すべての詳細が Oracle データベースに挿入される別の jsp ページにリダイレクトされます。

しかし、「org.apache.jasper.JasperException: java.lang.NumberFormatException: null」例外が発生します。また、「サーバーで内部エラー () が発生したため、この要求を満たすことができませんでした」というエラーが表示されます。あなたが私を助けてくれることを願っています。

コードは次のとおりです。

<html>
    <head>
    <script type="text/javascript">
    function validate()
    {

        if(document.frm.username.value=="")
        {
          alert("Please enter Username");
          document.frm.username.focus();
        }

        else if(document.frm.mobile.value=="")
         {       
            alert("Please Enter your contact number");
            document.frm.mobile.focus();
         } 

       else
       {
        window.location = "insert.jsp";
       }
     }
</script>
    </head>

    <body>
    <form name="frm">
    <table>
    <tr><td>User Name:</td><td><input type="text" name="username"></td></tr>
    <tr><td>Contact Number:</td><td><input type="text" name="mobile"></td></tr>
    <tr><td><input type="submit" value="Submit" onclick="validate()"></td><td></td></tr>
    </table>
    </form>
    </body>

挿入.jsp:

  <body>
             <%@page import="java.sql.*"%>
             <%@page import="java.util.*"%>
    <%
    Connection con=null;
    int mobile=Integer.parseInt(request.getParameter("mobile"));
    String username=request.getParameter("username");
    try{
         Class.forName("oracle.jdbc.driver.OracleDriver");
        con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","manager");

    Statement st=con.createStatement();
    st.executeUpdate("insert into stud values("+mobile+",'"+username+"')");
    out.println("Data is successfully inserted!");

      }

     catch(Exception e)
    {
       System.out.print(e);
    }
    %>
        </body>
4

4 に答える 4

1

GETonを実行するようにブラウザーをリダイレクトしていinsert.jspますが、その新しい URL に要求パラメーターを提供していません。したがって、JSP はmobileリクエスト パラメータである をフェッチしnull、それを整数に解析してNumberFormatException.

次のように、リクエスト パラメータを URL に追加することができます。

window.location = "insert.jsp?mobile=" + document.frm.mobile.value + "&username=" + document.frm.username.value;

ただし、これらの値はPOSTGET. タグにaction="insert.jsp"属性を追加し、属性をに変更して削除することで、それを達成できると思いますformonClickonSubmit

 else {
    window.location = "insert.jsp";
 }

これにより、ブラウザは通常のフォーム送信を再開できるようになります。return false;空のフィールドに焦点を合わせた後にそれをステートメントと組み合わせると、ブラウザーがフォームを送信できなくなります。

于 2013-03-28T10:32:23.753 に答える
1

では、携帯電話番号が空白の場合はどうなりますか?

   int mobile=Integer.parseInt(request.getParameter("mobile"));

Integer.parseInt()空またはヌルの文字列を解析するように求めていますが、それが問題の原因です。

ドキュメントから:

例外: NumberFormatException - 文字列に解析可能な整数が含まれていない場合。

設定されていることを確認し、mobileそうでない場合はシナリオを処理する必要があります。

Integerところで、携帯電話番号を保存するために を使用しません。桁数が原因でオーバーフローが発生したり、構造 (国コードや番号など) を維持したい場合があります。

于 2013-03-28T10:31:05.450 に答える
0

を使用している場合はparseInt()、どこかで例外をキャッチする必要があります。

int mobile;
try {
  mobile = Integer.parseInt(request.getParameter("mobile"));
} catch (NumberFormatException e) {
  // do something
}

あなたの場合、request.getParameter("mobile")おそらくnullを返しています。

編集:すでに述べたように、電話番号を整数で保存することはお勧めできません。Long代わりに試してください。

于 2013-03-28T10:30:26.900 に答える
0

まず、あなたのコードは非常に危険です。サーバー側で null または空をチェックする必要があります。Statement の代わりに PreparedStatement を使用します。

次に、コードwindow.location = "insert.jsp";が期待どおりに機能しません。action="insert.jsp" を使用して、そのページにデータを送信します。次に、js 関数で、条件を満たさない場合は false を返し、そうでない場合は true を返します。

onClick イベントの代わりに onSubmit="return validate()" を使用します。

于 2013-03-28T10:35:05.510 に答える