0

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

1 回答 1

1

我猜你的问题是你正在打电话ProcessInfo,然后Register在单独的请求中。这显然是行不通的,因为@Model它是一个刻板印象,@RequestScoped这意味着这个 bean 将始终在每个请求上重新创建。查看源代码

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

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

PS Java 约定说您应该使用小写的第一个字母来命名 Java 方法,因此例如更改processInfo()

于 2013-10-17T10:06:03.687 回答