有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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中的回发吗?我怎样才能防止这种情况发生


共 (2) 个答案

  1. # 1 楼答案

    假设将@ManagedBean设置为@RequestScope,那么该值自身重置的原因是每次收到新请求时都会创建bean。当你点击按钮时就会发生这种情况。每次创建该类的实例时,都会调用构造函数,因此会重置变量的值

    正如上面所建议的,你“可以”尝试@ViewScope bean,但是tbh,听听巴卢斯克在评论中说的话。真正的问题是使用静态变量来跟踪信息。如果您需要跟踪信息,则可以考虑使用会话属性。p>

  2. # 2 楼答案

    问题是,由于它是一个@RequestScopedbean,所以在每个请求(包括ajax请求)上都会创建它,构造函数会将static变量重新初始化为0(默认值)。顺便说一下,这是在构造函数中完成的:

    public RestaurantBean() {
        //this is the culprit
        variable_static = 0;
    }
    

    知道了这一点,解决方案将把bean的范围更改为更大的范围,比如@ViewScoped@SessionScoped(取决于您的需要)

    在这之后,巴卢斯克和我会怎么想:为什么要使用static字段?至少这个字段的唯一目的是在同一个视图中沿着多个请求生存(这已经由@ViewScoped实现),那么没有理由用static修饰符标记它,除非您与其他类共享这个变量(应用程序的设计会很奇怪)

    更多信息: