2015-11-26 4 views
0

Я новичок в сервлетах. И первая попытка - написать простое JSP-приложение. Какими приращениями являются значение, начинающееся с 0, а также возможное его излоение.Приращение/Уменьшение значения с помощью JSP/Servlet

Проблемы:

  • счетчик получить не initalized с 0 (поле пусто на странице JSP)
  • при нажатии на кнопку «Увеличиваем его» он получает приращение на 1, когда я снова нажмите на ту же кнопку, значение остается 1, но оно должно быть 2 (на второй клик)

    @WebServlet("/countServlet") 
        public class CounterServlet extends HttpServlet 
        { 
         private static final long serialVersionUID = 1L; 
    
        protected void doGet(HttpServletRequest request, 
          HttpServletResponse response) throws ServletException, IOException 
        { 
    
         Counter counter; 
    
         counter = (Counter) request.getAttribute("counter"); 
         if (counter == null) 
         { 
          counter = new Counter(); 
         } 
    
         String increment = request.getParameter("increment"); 
         if (increment != null) 
         { 
          counter.increment(); 
         } 
    
         String reset = request.getParameter("decrement"); 
         if (reset != null) 
         { 
          counter.decrement(); 
         } 
    
         request.setAttribute("counter", counter.getCounter()); 
         request.getRequestDispatcher("/index.jsp").forward(request, response); 
    
        } 
    

Счетчик модели:

public class Counter { 

    private int counter = 0; 

    public void increment() { 
     counter++; 
    } 

    public void decrement() { 
     counter--; 
    } 

    public void reset() { 
     counter = 0; 
    } 

    public int getCounter() { 

     return counter; 
    } 
} 

JSP:

<title>Counter</title> 
</head> 
<body> 

The current state of the counter: ${counter} 

<form action="countServlet" method="GET"> 
<input type="submit" name="increment" value="Increment it"> 
<input type="submit" name="decrement" value="Decrement it"> 
<input type="hidden" name="counter" value="${counter}"> 
</form> 

ответ

3

Проблема заключается в том, чтобы сделать с тем, как вы получаете ваш Counter экземпляр

counter = (Counter) request.getAttribute("counter"); 
if (counter == null) 
{ 
    counter = new Counter(); 
} 

Ваш счетчик всегда будет null в этот момент, потому что вы получаете это из объекта request, который является новым экземпляром для каждого входящего запроса. Атрибуты, установленные в запросе, не сохраняются между запросами.

Что вы хотите сделать, это получить его и сохранить его на сеансе.

counter = (Counter) request.getSession().getAttribute("counter"); 
if (counter == null) 
{ 
    counter = new Counter(); 
    request.getSession().setAttribute("counter", counter); 
} 

Вы должны сделать какой-либо объект, который вы хранящий на сессии Serializable

public class Counter implements java.io.Serializable { 

EDIT:

Как @daiscog правильно указывает на

<input type="hidden" name="counter" value="${counter}"> 

в ваш JSP не нужен, как вы хранить значение счетчика в сеансе.

+0

Спасибо, сейчас он подсчитывает/уменьшает. У вас есть идея, почему значение не инициализировано 0? В настоящее время он подсчитывает от пустого поля до 1. :) – Matej

+0

Возможно, стоит добавить, что скрытое поле «счетчик» в HTML не требуется и не делает то, что, по-видимому, думает OP. – megaflop

+0

@Matej, когда вы говорите «пустое поле», можете ли вы сложить? В поле 'Counter' поле счетчика инициализируется на' 0'. –

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