Java 使用JSP/Servlet递增/递减值
我是新来的服务员。我的第一次尝试是编写一个简单的JSP应用程序。哪些增量是从0开始的值,也可以重新增量 问题: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
- 计数器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);
}