@Model Java类中变量的作用域是什么?

@Model Java类中变量的作用域是什么?,java,jsf,cdi,Java,Jsf,Cdi,我遇到了一个奇怪的问题。我调用ProcessInfo,它运行一些逻辑并将continueRegistration设置为true。在我的表单上有一个调用Register方法的函数。现在ProcessInfo总是在Register之前运行,因此这应该将continueRegistration设置为true,但当Register方法被调用时,continueRegistration显示为false。知道为什么没有设置吗 我在mutator中放了一个print语句,它表明它被设置为true @Model

我遇到了一个奇怪的问题。我调用ProcessInfo,它运行一些逻辑并将continueRegistration设置为true。在我的表单上有一个调用Register方法的函数。现在ProcessInfo总是在Register之前运行,因此这应该将continueRegistration设置为true,但当Register方法被调用时,continueRegistration显示为false。知道为什么没有设置吗

我在mutator中放了一个print语句,它表明它被设置为true

@Model
public class LoginController implements Serializable{
private boolean continueRegistration;

public void ProcessInfo(){
... do something
    setContinueRegistration(true)
}

public void Register(){
   if(getContinueRegistration()){
     ...continue flow
   }
}

public boolean getContinueRegistration() {  
        return continueRegistration;
}

public void setContinueRegistration(boolean continueRegistration) {
    System.out.println("Set continueRegistration: "+continueRegistration);
    this.continueRegistration = continueRegistration;
}

我想您的问题是,您正在分别请求调用
ProcessInfo
,然后调用
Register
。这显然不起作用,因为
@Model
是一个原型,它具有
@requestscope
,这意味着每次请求都会重新创建这个bean。见出处

@Named
@RequestScoped
@Stereotype
@Target({TYPE, METHOD, FIELD})
@Retention(RUNTIME)
public @interface Model {}
因此,如果您的注册是一个多步骤的过程,那么我建议您使用
@ConversationalScoped
,它将经受多次请求,并且您可以控制完成注册所需的所有步骤。一些基础教程


p.S.Java约定说,您应该使用小写字母来命名Java方法,因此更改例如
processInfo()

从哪个包生成
@Model
注释?@luigimendoza Java.enterprise.inject.Model您是从不同的线程调用它吗?在某些情况下,您需要添加“volatile”以确保线程能够看到彼此的更改。@AgilePro不,我不知道,但我会尝试volatile,看看这是否解决了问题。