java中构造函数中的代码仅在页面刷新时调用一次

java中构造函数中的代码仅在页面刷新时调用一次,java,jsf,Java,Jsf,在java中,即使页面通过某个actionListener刷新,构造函数中的代码也可能只被调用一次。在C#Page.PostBack方法很好用,但在java中我找不到正确的方法。如果您谈论的是JSF,那么您需要将BackingBeans范围从“应用程序”或“会话”更改为“请求” 这样,您的构造函数可以根据请求工作 JSF 2.0的示例: @ManagedBean() @SessionScoped public class MyBackingBean { ... } @ManagedBean

在java中,即使页面通过某个actionListener刷新,构造函数中的代码也可能只被调用一次。在C#Page.PostBack方法很好用,但在java中我找不到正确的方法。

如果您谈论的是JSF,那么您需要将BackingBeans范围从“应用程序”或“会话”更改为“请求”

这样,您的构造函数可以根据请求工作

JSF 2.0的示例:

@ManagedBean()
@SessionScoped
public class MyBackingBean {
  ...
}

@ManagedBean()
@RequestScoped
public class MyBackingBean {
  ...
}

如果您正在谈论JSF,那么您需要将BackingBeans范围从“应用程序”或“会话”更改为“请求”

这样,您的构造函数可以根据请求工作

JSF 2.0的示例:

@ManagedBean()
@SessionScoped
public class MyBackingBean {
  ...
}

@ManagedBean()
@RequestScoped
public class MyBackingBean {
  ...
}

您可以通过以下函数知道何时回发:

import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;

@ManagedBean
public class HelperBean {

     public boolean isPostback() {
            FacesContext context = FacesContext.getCurrentInstance();
            return context.getRenderKit().getResponseStateManager().isPostback(context);
        }

}
如果每次刷新都调用默认构造函数,这意味着您的bean是
requestscope
。刷新(GET)或回发(POST)被视为请求,因此将为每个请求创建bean。还有其他实例化选项,例如
SessionScoped
ApplicationScoped
,或者在发生回发时使用上述函数实例化它

设置范围a-la-JSF1.2

编辑位于
/WEB-INF
下的
faces config.xml
文件:

 <managed-bean>
  <managed-bean-name>myBean</managed-bean-name>
  <managed-bean-class>com.mypackage.myBean</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
 </managed-bean>

蚕豆
com.mypackage.myBean
要求

您可以使用
请求
会话
应用程序
您可以通过以下功能知道何时回发:

import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;

@ManagedBean
public class HelperBean {

     public boolean isPostback() {
            FacesContext context = FacesContext.getCurrentInstance();
            return context.getRenderKit().getResponseStateManager().isPostback(context);
        }

}
如果每次刷新都调用默认构造函数,这意味着您的bean是
requestscope
。刷新(GET)或回发(POST)被视为请求,因此将为每个请求创建bean。还有其他实例化选项,例如
SessionScoped
ApplicationScoped
,或者在发生回发时使用上述函数实例化它

设置范围a-la-JSF1.2

编辑位于
/WEB-INF
下的
faces config.xml
文件:

 <managed-bean>
  <managed-bean-name>myBean</managed-bean-name>
  <managed-bean-class>com.mypackage.myBean</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
 </managed-bean>

蚕豆
com.mypackage.myBean
要求

您可以使用
请求
会话
应用程序

您在说什么“页面”?每个实例只调用一次Java构造函数。如果构造函数代码被调用的次数超出预期,则可能会创建比预期更多的对象。jsf页面。每次刷新调用默认构造函数…你在说什么“页面”?每个实例只调用一次Java构造函数。如果构造函数代码被调用的次数超出预期,则可能会创建比预期更多的对象。jsf页面。每次刷新调用默认构造函数。。。