簡體   English   中英

使用JSP / Servlet遞增/遞減值

[英]Increment/Decrement a value with JSP/Servlet

我是servlet的新手。 我的第一次嘗試是編寫一個簡單的JSP-Application。 哪些增量是從0開始的值,也可以將其遞減。

問題:

  • 計數器不以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>

問題與獲取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 {

編輯:

正如@daiscog正確指出的那樣

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

不需要在JSP中使用,因為您將在會話中存儲計數器值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM