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

标签 java jsf cdi

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

相关文章:

java - 为什么 <h :form> renderer add a hidden field with form ID as name and value

java - <富 :listShuttle> -- Preventing duplicates?

java - 是否可以重启 Netbean 的 Tomcat 捆绑版本?

java - java中构造函数的问题

Java:如果我们必须自己实现抽象方法,实现多个接口(interface)如何实现多重继承?

java - 如何从多个嵌套 FXML 获取数据并调用其 Controller 上的方法

jsf - 为什么 <f :validateBean/> won't work?

java - 为什么不在同一个服务类中调用拦截器?

java - 您在 CDI 中使用生产者方法的类的范围是什么?

Java CDI @PersistenceContext 和线程安全