2016-03-10 2 views
0

Я хочу создать небольшое приложение викторины в jsp, которое задаст вопросы, которые хранятся в массиве. Он должен задать запрос до последнего индекса массива. Здесь ответ также сохраняется в массиве. То, что я сделал до сих пор является:Сообщение об ошибке с JSP и сервлетом?

Главная Servlet

@Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

     try (PrintWriter out = response.getWriter()) { 
      session = request.getSession(true); 
      Quiz quiz = new Quiz(); 
      if (session.isNew()) { 

       quiz.setTotalCorrectAnswers(0); 
       quiz.setCounter(0); 
       question = quiz.getNextQuestion(0); 
       answer = quiz.getAnswer(0); 
      } 

      session.setAttribute("quizes", quiz); 
      request.setAttribute("quiz", quiz); 
      request.setAttribute("currentQuestion", question); 
      request.setAttribute("error", false); 
      RequestDispatcher view = request.getRequestDispatcher("quiz.jsp"); 
      view.forward(request, response); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     try (PrintWriter out = response.getWriter()) { 
      String userAnswer = request.getParameter("txtAnswer"); 
      Quiz quiz = (Quiz) session.getAttribute("quizes"); 
      boolean error = false; 

      if (userAnswer.equals(quiz.getAnswer(quiz.getCounter()))) { 
       totalQuestions++; 
       quiz.setTotalCorrectAnswers(totalQuestions); 
       quiz.setCounter(quiz.getCounter() + 1); 
       session.setAttribute("nextQuestion", quiz.getCounter() + 1); 
      } else { 
       quiz.setTotalCorrectAnswers(totalQuestions); 
       quiz.setCounter(quiz.getCounter()); 
       error = true; 
      } 
      session.setAttribute("quizes", quiz); 

      if(quiz.getTotalCorrectAnswers()>=5){ 
       session.invalidate(); 
       generateQuizOverPage(out); 
      }else{ 
       request.setAttribute("quiz", quiz); 
       request.setAttribute("currentQuestion", quiz.getNextQuestion(quiz.getCounter())); 
       request.setAttribute("error", error); 
       RequestDispatcher view = request.getRequestDispatcher("quiz.jsp");view.forward(request, response); 

      }    
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

Quiz модель

String[] numberSeries = { 
     "3, 1, 4, 1, 5, ", 
     "1, 1, 2, 3, 5, ", 
     "1, 4, 9, 16, 25, ", 
     "2, 3, 5, 7, 11, ", 
     "1, 2, 4, 8, 16, " 
    }; 

    String[] answer = {"9", "8", "36", "13", "32"}; 

    private int counter; 
    private boolean isCorrect; 
    private int totalCorrectAnswers; 

    public Quiz() { 
     counter = 0; 
     isCorrect = false; 
     totalCorrectAnswers = 0; 
    } 

    public int getCounter() { 
     return counter; 
    } 

    public void setCounter(int counter) { 
     this.counter = counter; 
    } 

    public boolean isIsCorrect() { 
     return isCorrect; 
    } 

    public void setIsCorrect(boolean isCorrect) { 
     this.isCorrect = isCorrect; 
    } 

    public int getTotalCorrectAnswers() { 
     return totalCorrectAnswers; 
    } 

    public void setTotalCorrectAnswers(int totalCorrectAnswers) { 
     this.totalCorrectAnswers = totalCorrectAnswers; 
    } 

    public String getNextQuestion(int index) { 
     return numberSeries[index]; 
    } 

    public String getAnswer(int index) { 
     return answer[index]; 
    } 

и quiz.jsp файл:

<%@page import="com.app.numberquiz.models.Quiz"%> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<% 
    Quiz quiz = (Quiz) request.getAttribute("quiz"); 
    String currQuest = (String) request.getAttribute("currentQuestion"); 
    Boolean error = (Boolean) request.getAttribute("error"); 
%> 

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JSP Page</title> 
    </head> 
    <body> 
     <form method='post'> 
     <h3>Have fun with NumberQuiz!</h3> 
     <p>Your current score is: 
     <% out.print(quiz.getTotalCorrectAnswers()); %> </br></br> 
     <p>Guess the next number in the sequence! </p> 
     <p>["<% out.print(currQuest); %><span style='color:red'>?</span>"]</p> 

     <p>Your answer:<input type='text' name='txtAnswer' value='' /></p> 


     <% if (error) { %> 
      <p style='color:red'>Your last answer was not correct! Please try again</p> 
     <% } %> 
     <p><input type='submit' name='btnNext' value='Next' /></p> 

     </form> 
    </body> 
</html> 

В первом запуске он отображает представление правильно, но когда я перезагружаю страницу, он начинает показывать null в currQues в представлении это проблема в сеансе, если да, тогда, когда я сделал ошибку, может кто-нибудь объяснить это мне спасибо!

ответ

0

Когда вы перезагружаете страницу, метод doGet будет работать, вы задаете вопрос, если сеанс вновь создан, и вы поместите его в запрос. Поэтому, когда вы перезагружаете сеанс вашей страницы, он не создан и ваш текущийQuestion не установлен. Вы должны добавить случай else и задать вопрос, или вы должны поместить эти переменные в свой сеанс и получить его из сеанса в jsp.

Смежные вопросы