2017-01-10 3 views
3

(я знаю, вопросы немного долго, но я действительно полагаю, что решение легко, так что на самом деле был бы признателен, если кто-то может помочь мне взглянуть)JSP: с помощью JavaScript, чтобы отправить форму

Я пытаюсь написать школьная система, где вы можете ввести имя студента, год, класс, на веб-страницу и сохранить информацию о студенте для составления списка. Я бы хотел, чтобы на веб-странице было две «кнопки»:

Один из них «сохранить и следующий», то есть, если вы закончили вводить информацию об одном студенте, нажмите эту кнопку, информация будет сохранена, а веб-страница обновится, чтобы ввести следующую студенческая информация.

Во-вторых, это «сохранить и закончить», то есть, если это последний студент, которого вы хотите ввести, щелкните это, и последняя информация о студенте будет сохранена, а веб-страница будет перенаправлена ​​на следующую страницу, где будет показан список всех учеников Информация.

Для достижения этой цели в JSP, я использовал два 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 функция 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, список, созданный для добавления студентов пользователь ввел

public class InputGradeServlet extends HttpServlet { 
List<Student> inputStList = new <Student>ArrayList(); 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

если пользователь нажимает кнопку «сохранить и затем», формируется одна форма, а сервлет выполняет действие сохранения ученика в список и перенаправляет его в тот же файл 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"); 
} 
} 
} 

Если пользователь нажимает кнопку «сохранить и закончить», т.е. представление второй формы, и сервлет снова добавить окончательный студент вошел в список и перенаправлять на следующую веб-страницу, показывающую всю список:

}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 Thumbs: If 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

Yay это работает! Люблю тебя! –

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