2017-01-10 89 views
3

(我知道這個問題是有點長,但我相信解決辦法是容易的,所以會很感激,如果有人可以幫我看看)JSP:使用JavaScript來提交表單

我想寫一個學校系統,您可以在網頁上輸入學生的姓名,年份,年級,並保存學生的信息以生成列表。我希望它有兩個「按鈕」在網頁上:

一個是「保存和下一個」,即如果你輸入一個學生信息,點擊這個,信息被保存,網頁更新進入下一個學生信息。

其次是「保存並完成」,即如果這是您想要輸入的最終學生,請單擊該按鈕並保存最後一個學生信息,並將網頁重定向到顯示所有學生列表的下一頁信息。

爲了實現這一目標,在JSP中,我用了兩個HTML表單,其中有一個我用JavaScript來試圖提交到servlet的,但我一定是做了錯誤的,因爲它不能正常工作:

這裏是我的代碼:

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函數使用的getElementById函數獲取第一種形式

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

而在Servlet中,創建添加的學生名單將用戶輸入

的信息

如果用戶按下「save and next」按鈕,表單將被提交,並且servlet執行將學生保存到列表並重定向到同一個JSP文件的操作,即再次重定向同一個網頁進入下一個學生: (也可能是有問題的)

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"); 
} 
} 
} 

如果用戶點擊「保存並完成」,即提交第二種形式,和servlet再次在最後加上學生進入到列表中,並重定向到下一個網頁顯示整個列表:

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

這是它出現問題的地方:提交第一個表單時點擊「保存並下一步」按鈕可以正常工作,但是當提交第二個按下「保存並完成」按鈕時,它會返回錯誤。

因此,我真的很感激,如果有人可以幫我看看?

+1

什麼是錯誤做的節目嗎? –

+0

它顯示NullPointerException –

+0

你沒有接受我的答案,點擊接受按鈕。 –

回答

1

有很多原因,這就是爲什麼你可以得到一個NullpointerException
Rule of ThumbsIf you want to compare a string then first check if it is not null.

根據您的要求,我給你如何能做到這一點的解決方案。 假設您的形式是這樣的:

<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 1,如果我們點擊保存並退出按鈕,然後將其設置flagVal 2.設置flagVal後它提交表單。提交後,你應該首先檢查你的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

您不會得到form1值。您張貼form2值,以便您收到空錯誤。

嘗試它,請:

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(); 
}