Spo*_*omf 5 java jsf java-ee jsf-2 managed-bean
我有一堆热切的 ApplicationScoped
托管bean.其中一些通过ManagedProperty
注释注入到其他注释中,形成依赖树.每个依赖bean在构造后操纵其父级.
但是,似乎为每次注射创建了一个新实例,从而使之前的操作无法完成.根据我的理解,ApplicationScoped
bean应该只创建一次.我误解了或者为什么会这样?是因为他们渴望吗?
这是一个例子:
package example;
import javax.annotation.PostConstruct;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
@ManagedBean(eager = true)
@ApplicationScoped
public class ParentBean
{
static int initCount = 0;
// ...
@PostConstruct
public void init()
{
++initCount; // Will end up being between 1 and 3. Expected always 1.
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
package example;
import javax.annotation.PostConstruct;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
@ManagedBean(eager = true)
@ApplicationScoped
public class Child1Bean
{
@ManagedProperty("#{parentBean}") ParentBean parentBean;
public ParentBean getParentBean()
{
return parentBean;
}
public void setParentBean(ParentBean parentBean)
{
this.parentBean = parentBean;
}
@PostConstruct
public void init()
{
// manipulate parentBean
}
}
Run Code Online (Sandbox Code Playgroud)
package example;
import javax.annotation.PostConstruct;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
@ManagedBean(eager = true)
@ApplicationScoped
public class Child2Bean
{
@ManagedProperty("#{parentBean}") ParentBean parentBean;
public ParentBean getParentBean()
{
return parentBean;
}
public void setParentBean(ParentBean parentBean)
{
this.parentBean = parentBean;
}
@PostConstruct
public void init()
{
// manipulate parentBean
}
}
Run Code Online (Sandbox Code Playgroud)
小智 0
我对 Mojarra 2.0.x 也有同样的问题。我猜这个问题与多线程 JSF 初始化有关。尝试通过 com.sun.faces.enableMultiThreadedStartup 参数禁用它。
归档时间: |
|
查看次数: |
1800 次 |
最近记录: |