Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JSP/Servlet递增/递减值_Java_Jsp_Servlets - Fatal编程技术网

Java 使用JSP/Servlet递增/递减值

Java 使用JSP/Servlet递增/递减值,java,jsp,servlets,Java,Jsp,Servlets,我是新来的服务员。我的第一次尝试是编写一个简单的JSP应用程序。哪些增量是从0开始的值,也可以重新增量 问题: 计数器get no初始化为0(jsp页面上的字段为空) 当我点击按钮“Increment it”时,它的增量为1,当我再次点击同一按钮时,值保持为1,但它应该是2(第二次点击时) 计数器型号: public class Counter { private int counter = 0; public void increment() { co

我是新来的服务员。我的第一次尝试是编写一个简单的JSP应用程序。哪些增量是从0开始的值,也可以重新增量

问题:

  • 计数器get no初始化为0(jsp页面上的字段为空)
  • 当我点击按钮“Increment it”时,它的增量为1,当我再次点击同一按钮时,值保持为1,但它应该是2(第二次点击时)

计数器型号:

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:

计数器
计数器的当前状态:${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);
}
您应该使存储在会话中的任何对象可序列化

public class Counter implements java.io.Serializable {
编辑:

正如@daiscog正确指出的

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


在JSP中不需要,因为您将在会话中存储计数器值。

问题在于获取
计数器实例的方式

counter = (Counter) request.getAttribute("counter");
if (counter == null)
{
    counter = new Counter();
}
counter = (Counter) request.getSession().getAttribute("counter");
if (counter == null)
{
    counter = new Counter();
    request.getSession().setAttribute("counter", counter);
}
此时,您的计数器将始终为
null
,因为您是从
request
对象获取它的,该对象是每个传入请求的新实例。请求上设置的属性不会在请求之间持久化

您要做的是获取它并将其存储在会话中

counter = (Counter) request.getSession().getAttribute("counter");
if (counter == null)
{
    counter = new Counter();
    request.getSession().setAttribute("counter", counter);
}
您应该使存储在会话中的任何对象可序列化

public class Counter implements java.io.Serializable {
编辑:

正如@daiscog正确指出的

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


在您的JSP中不需要,因为您将在会话中存储计数器值。

谢谢,它现在正确计数/递减。您是否也有一个想法,为什么不使用0初始化该值?当前它从空字段计数为1.:)值得一提的是,HTML中隐藏的“counter”字段不是必需的,也没有执行OP可能认为的操作。@Matej当你说“empty field”时,你能理解吗?在您的
计数器
类中,计数器字段被初始化为
0
。我的意思是在jsp页面上,在您按下任何按钮之前,它会显示:计数器的当前状态:,但它应该是:计数器的当前状态:0谢谢,它现在正确计数/递减。您是否也有一个想法,为什么不使用0初始化该值?当前它从空字段计数为1.:)值得一提的是,HTML中隐藏的“counter”字段不是必需的,也没有执行OP可能认为的操作。@Matej当你说“empty field”时,你能理解吗?在您的
计数器
类中,计数器字段被初始化为
0
。我的意思是在jsp页面上,在您按下任何按钮之前,它会显示:计数器的当前状态:,但它应该是:计数器的当前状态:0
counter = (Counter) request.getSession().getAttribute("counter");
if (counter == null)
{
    counter = new Counter();
    request.getSession().setAttribute("counter", counter);
}