5

熱心な ApplicationScopedマネージド Bean がたくさんあります。ManagedPropertyそれらのいくつかは、アノテーションによって他のものに注入され、依存関係のツリーを形成します。依存する各 Bean は、構築後にその親を操作します。

ただし、注射ごとに新しいインスタンスが作成されるように見えるため、以前の操作が元に戻されます。私の理解では、ApplicationScopedBean は 1 回だけ作成する必要があります。私は誤解していますか、それともなぜこれが起こっているのですか? 熱心だからでしょうか。

次に例を示します。

ParentBean.java

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.

        // ...
    }
}

Child1Bean.java

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
    }
}

Child2Bean.java

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
    }
}
4

2 に答える 2

0

Mojarra 2.0.x でも同じ問題があります。その問題は、マルチスレッドの JSF 初期化に関連していると思います。com.sun.faces.enableMultiThreadedStartup パラメータで無効にしてみてください。

于 2012-10-22T10:38:18.087 に答える