2017-01-10 84 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(); 
}