java JSF阻止命令按钮自动回调类构造函数
我有一个bean类,如下所示:
static int variable_static;
public RestaurantBean() {
variable_static = 0;
}
//...
//value of variable_static changes throughout the code
//...
public string button() {
//firing this button causes the variable_static value to change back to 0
return null;
}
我有一个静态变量,它的值在整个代码中都会发生变化(我通过打印出它的值来了解它),但是当按钮启动时,它的值会自动变回默认值,这不是我想要的。这是JSF中的回发吗?我怎样才能防止这种情况发生
# 1 楼答案
假设将@ManagedBean设置为@RequestScope,那么该值自身重置的原因是每次收到新请求时都会创建bean。当你点击按钮时就会发生这种情况。每次创建该类的实例时,都会调用构造函数,因此会重置变量的值
正如上面所建议的,你“可以”尝试@ViewScope bean,但是tbh,听听巴卢斯克在评论中说的话。真正的问题是使用静态变量来跟踪信息。如果您需要跟踪信息,则可以考虑使用会话属性。p>
# 2 楼答案
问题是,由于它是一个
@RequestScoped
bean,所以在每个请求(包括ajax请求)上都会创建它,构造函数会将static
变量重新初始化为0
(默认值为)。顺便说一下,这是在构造函数中完成的:知道了这一点,解决方案将把bean的范围更改为更大的范围,比如
@ViewScoped
或@SessionScoped
(取决于您的需要)在这之后,巴卢斯克和我会怎么想:为什么要使用
static
字段?至少这个字段的唯一目的是在同一个视图中沿着多个请求生存(这已经由@ViewScoped
实现),那么没有理由用static
修饰符标记它,除非您与其他类共享这个变量(应用程序的设计会很奇怪)更多信息: