我遇到了一个奇怪的问题。我调用 ProcessInfo 来运行一些逻辑并将 continueRegistration 设置为 true。在我的表单上,我有一个调用 Register 方法的表单。现在,ProcessInfo 始终在 Register 之前运行,因此应该将 continueRegistration 设置为 true,确实如此,但当调用 Register 方法时 continueRegistration 显示为 false。知道为什么没有设置吗?
我在更改器(mutator)中放置了一条打印语句,它表明它被设置为 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
是一个具有 @RequestScoped
的构造型,这意味着这个 bean 将始终在每个请求时重新创建。查看源码
@Named
@RequestScoped
@Stereotype
@Target({TYPE, METHOD, FIELD})
@Retention(RUNTIME)
public @interface Model {}
因此,如果您的注册是一个多步骤过程,那么我建议您使用 @ConversationalScoped
,它可以承受多个请求,并且您可以控制完成注册所需的所有步骤。一些基础教程here .
附注Java 约定规定,命名 Java 方法时应使用小写首字母,因此请更改 processInfo()
关于java - @Model Java 类中变量的范围是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19414055/