@Model Java类中变量的范围是什么?

时间:2013-10-16 21:16:15

标签: java jsf cdi

我遇到了一个奇怪的问题。我调用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;
}

1 个答案:

答案 0 :(得分:1)

我想你的问题是你在单独的请求中调用ProcessInfo然后调用Register。这显然不起作用,因为@Model是具有@RequestScoped的构造型,因此这意味着将始终在每个请求上重新创建此bean。查看来源

@Named
@RequestScoped
@Stereotype
@Target({TYPE, METHOD, FIELD})
@Retention(RUNTIME)
public @interface Model {}

因此,如果您的注册是一个多步骤过程,那么我建议您使用@ConversationalScoped,它将在多个请求中存活,您可以控制完成注册所需的所有步骤。一些基本教程here

P.S。 Java约定表示您应该使用小写的第一个字母来命名Java方法,因此更改实例processInfo()

相关问题