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