2013-03-28 2 views
1

각 필드에 대한 유효성 검증을 포함하는 로그인 양식을 작성했습니다. 제출 버튼을 클릭하면 모든 필드의 유효성 검사를 위해 validation()이 호출되며, 유효성 검사가 완료되면 모든 세부 정보가 Oracle 데이터베이스에 삽입되는 다른 JSP 페이지로 리디렉션됩니다.java.lang.NumberFormatException : null

하지만 "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> 

insert.jsp :

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

에서 : 당신이 parseInt()를 사용하는 경우

<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> 
+2

분명히 휴대 전화 번호는 일반적으로 10 자리 이상이며 정수에 적합합니다. 이것은 국제 전화 번호로 더욱 악화 될 것입니다! – Bridge

+1

사용자 이름이'') 인 경우 어떻게됩니까? 스터드에서 삭제하십시오. - ' – maba

+1

전화 번호는 숫자 형식으로 저장하면 안됩니다. 전화 번호는 수학적 숫자와 같지 않습니다. 예를 들어 계산을하고 싶습니다. 전화 번호가 0으로 시작하면 어떻게 될까요? 'int'는 그것을 기억하지 못할 것입니다. 전화 번호를 저장하는 대신 문자열 유형을 사용하십시오. – Jesper

답변

0

, 당신은 어딘가에 예외를 캐치 할 필요 귀하의 사례는 request.getParameter("mobile")입니다. 아마 null을 반환합니다.

편집 : 편집자 : 이미 언급했듯이 전화 번호를 정수로 저장하는 것은 좋은 생각이 아닙니다. 대신 Long을 시도하십시오.

+0

당신의 도움에 대단히 감사합니다 –

1

그렇다면 휴대 전화 번호가 비어 있으면 어떻게 될까요?

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

당신은 빈 또는 널 (null) 문자열을 구문 분석 Integer.parseInt()을 요구하고 그리고 그 문제의 원인.

the doc에서 :

예외 : NumberFormatException - 캐릭터 라인이 구문 분석 정수를 포함하지 않는 경우.

mobile이 채워져 있는지 확인하고 그렇지 않은 경우 시나리오를 처리해야합니다.

휴대 전화 번호를 저장하기 위해 Integer을 사용하지 않을 것입니다. 자릿수로 인해 오버플로가 발생할 수 있으며 구조를 유지하려고 할 수 있습니다 (예 : 국가 코드 및 번호).

+0

나는 그렇게 생각하지 않습니다. 이것은 널 입력입니다. 매개 변수가 없으므로 window.location = "insert.jsp"를 사용합니다. 자세한 내용은 내 대답을 참조하십시오. –

+0

도와 주셔서 대단히 감사합니다. –

1

GETinsert.jsp에 리디렉션하지만 사용자가 제공하지 않습니다. 새로운 URL에 대한 요청 매개 변수 따라서 JSP는 mobile 요청 매개 변수 인 null을 가져온 다음이를 구문 분석하여 NumberFormatException을 생성합니다.

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

그러나 대신 GET의하는 POST 요청에서 그 가치를 제출하는 더 나은 것 : 당신은 무엇을 할 수 있는지

지금처럼 URL에 요청 매개 변수를 추가합니다.난 당신의 form 태그에 action="insert.jsp" 속성을 추가 onSubmitonClick 속성을 변경하고 그 브라우저가 정상적인 양식 제출을 재개 할 수 있도록 것이기 때문에

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

을 제거하여 그것을 달성 할 수 있다고 생각. 빈 필드에 집중 한 후 return false; 문과 결합하면 브라우저가 양식을 제출하지 못하게됩니다.

+0

대단히 감사합니다. –

+0

도와 주시겠습니까? 그리고 스택 오버플로에 오신 것을 환영합니다. 이 답변이나 다른 사람이 귀하의 문제를 해결 한 경우 해당 답변을 수락 한 것으로 표시하십시오. – mthmulders

0

먼저 코드가 매우 위험합니다. 서버 측에서 null 또는 비어 있음을 확인해야합니다! Statement 대신 PreparedStatement를 사용합니다.

두 번째로 코드 window.location = "insert.jsp";은 예상대로 작동하지 않습니다. action = "insert.jsp"를 사용하여 해당 페이지로 데이터를 보냅니다. 그런 다음 js 함수에서 조건을 전달하지 않으면 false를 반환하고, 그렇지 않으면 true를 반환합니다.

onClick 이벤트를 사용하는 대신 onSubmit = "return validate()"를 사용하십시오.

+0

도움을 주셔서 대단히 감사합니다. –

관련 문제