2017-01-10 23 views
3

を提出するためにJavaScriptを使用して学校システムでは、学生の名前、年、学年をウェブページに入力し、学生の情報を保存してリストを作成することができます。JSP:私は記述しようとしています</p> <p>(私が質問を知って少し長いですが、私は解決策は簡単であると考えていますので、誰かが私を見て助けることができる場合は、それを本当に感謝)フォーム

1つの生徒情報を入力したら、これをクリックして情報を保存し、ウェブページを更新して次のページに移ります学生情報

2番目は「保存して終了」です。つまり、入力したい最終生徒の場合はこれをクリックし、最後の生徒情報が保存され、次のページにリダイレクトされ、すべての生徒のリストが表示されます情報

はこれを実現するために、JSPで、私は2つのHTMLフォームを使用し、そのうちの一つは、私は、サーブレットに提出しようとするためにJavaScriptを使用し、しかし、それが正常に動作しないので、私は何か間違ったことを行っている必要があります。ここでは

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

InputGrade.jsp:

<html> 
    <head> 
    <title>Title</title> 
    </head> 
    <body> 

最初の形式:ユーザーが情報を入力するために使用される入力ラベル、また、使用する入力ラベルは、送信ボタンを作成するには、「次のそれを保存」:

<form action = "InputGradeServlet" method="POST"> 
    <table> 
    <tr> 
     <td> 
      Enter Student Name: <input type="text" id="stName" name =  "stName" /> 
     </td> 
     <td> 
      Enter Subject: <input type="text" id="Subject" name = "Subject" /> 
     </td> 
     <td> 
     Enter Grade: <input type = "text" id="Grade" name = "Grade" /> 
     </td> 
     <td> 
      <input type="submit" value="save and next"/> 
     </td> 
    </tr> 
    </table> 
    <input type="text" name = "flag" style="display: none" value="1"/> 
</form> 

第二の形式「保存して終了」ボタンが含まれていますが、情報を提出するためにJavaScriptを使用します(私は、問題がどこにあるかと思います)

ユーザーはまだ最初の形式で学生の情報を入力しますが、 JavaScript関数の使用は、最初の形式

<form name="form2" action ="InputGradeServlet" method="POST" > 
<input type="text" name = "flag" style="display: none" value="2"/> 
<button onclick="finSaveFunc()">Finish and submit</button> 

<script> 

function finSaveFunc() { 

    var stName = document.getElementById("stName") 
    var Subject = document.getElementById("Subject") 
    var Grade = document.getElementById("Grade") 

    document.stName.submit(); 
    document.Subject.submit(); 
    document.Grade.submit(); 

} 

</script> 

でサーブレット、ユーザーが

に入った生徒を追加するために作成したリスト内の情報を取得する機能をgetElementByIdを

「保存して次へ」ボタンを押してフォームを送信し、サーブレットが学生をリストに保存して同じJSPファイルにリダイレクトする操作を行うと、同じWebページが次の学生に再度リダイレクトされます。第二の形式、およびサーブレットを提出(も問題かもしれません)

if (request.getParameter("flag").equals("1")) { 
     request.getParameter("Grade"); 
     ...... (get other info: name, year ect) 
     inputStList.add(findstudent); //add student entered to the list 
     response.sendRedirect("InputGrade.jsp"); 
} 
} 
} 

ユーザーを押して、「保存して終了」の場合、すなわち、再びリストに入力され、最終的な学生を追加し、全体を示す次のWebページにリダイレクトしますリスト:

}else if (request.getParameter("flag").equals("2")) { 
request.getParameter("Grade"); 
.... 
inputStList.add(findstudent); 
request.getSession().setAttribute("inputStList",inputStList); 
response.sendRedirect("ShowList.jsp"); } 

これは問題になる場所です:最初のフォームを送信すると「保存して次へ」ボタンがうまくいきますが、「保存して終了」ボタンを押して2番目のフォームを送信するとエラーが返されます。

だから、もし私が見て助けることができれば本当にありがとう?

+1

何のエラーがやったことは示して? –

+0

NullPointerExceptionが表示されます –

+0

あなたは受け入れボタンを押して私の答えを受け入れませんでした。 –

答えて

1

NullpointerExceptionを入手できる理由はたくさんあります。 Rule of Thumbs
If you want to compare a string then first check if it is not null.

あなたの条件によると、私はあなたがそれをどのように行うことができます解決策を与えています。今、あなたは保存し、次のボタンをクリックしたときに、それがflagVal 1を設定し、我々は保存し、終了ボタンをクリックした場合、それはflagValを設定した後flagVal 2を設定します

<html> 
    <head> 

    <script> 
     function _submit(flagVal) { 
      document.getElementById('flagValId').value=flagVal; 
      document.getElementById('someFormId').submit(); 
     } 
    </script> 
    </head> 

    <body> 
     <form action = "InputGradeServlet" method="POST" id="someFormId"> 
      <table> 
      <tr> 
       <td> 
        Enter Student Name: <input type="text" id="stName" name ="stName" /> 
       </td> 
       <td> 
        Enter Subject: <input type="text" id="Subject" name = "Subject" /> 
       </td> 
       <td> 
       Enter Grade: <input type = "text" id="Grade" name = "Grade" /> 
       </td> 
       <td> 
        <input type="button" value="save and next" onclick="_submit('1')"/> 
        <input type="button" value="save and exit" onclick="_submit('2')"/> 
       </td> 
      </tr> 
      </table> 
      <input type="hidden" id="flagValId" name = "flag" value=""/> 
     </form> 
    </body> 
</html> 

: は、フォームは次のようになると仮定しますフォームを送信します。あなたから提出した後、あなたのflagValが何であるか最初に確認する必要があります。だからdoPost方法

if (request.getParameter("flag")!=null && request.getParameter("flag").equals("1")) { 
    //Add your student in this block and show the input page again. 
    response.sendRedirect("InputGrade.jsp"); 
}else if (request.getParameter("flag")!=null && request.getParameter("flag").equals("2")) { 
     //Add your student in this block and show the list. 
     response.sendRedirect("ShowList.jsp"); 
} 

希望に役立ちます。

+1

それはうまく動作します!あなたを愛してます! –

0

フォーム1の値は取得されません。 form2の値を投稿すると、nullエラーが発生します。

それをしてください試してみてください。

function finSaveFunc() { 
    var stName = document.getElementById("stName") 
    var Subject = document.getElementById("Subject") 
    var Grade = document.getElementById("Grade") 
    var newForm = document 
    .getElementById("form2") 
    .appendChild(stName) 
    .appendChild(Subject) 
    .appendChild(Grade); 
    newForm.submit(); 
} 
関連する問題

 関連する問題