0

Bean から BeanArrayList<String>にあるにアクセスしようとしています。デプロイ時に AS Bean を初期化する必要があるため、Bean を使用して AS Bean を初期化しています。配列が作成されているのがわかりますが、RS Bean からアクセスしようとすると null になります。私は、配列の内容を出力する AS Bean を持っています。@PreDestroy が呼び出されると、配列は null になります。変数は AS Bean に保持されますか?javax.enterprise.context.ApplicationScopejavax.enterprise.context.RequestScoped@javax.ejb.Singleton @javax.ejb.Startup@PreDestroy

@Named("simpleTest")
@ApplicationScoped
  public class SimpleTest implements Serializable{
  private static final long serialVersionUID = -9213673463118041881L;
  private ArrayList<String> apps;

  public void simpleTest() {
           createApps();
           debugApps();
         }

    public void createApps() {
      apps = new ArrayList<String>();
      apps.add("This is string 1");
      apps.add("This is string 2");
    }

    public void debugApps() {
      System.out.println("Beginning debug...");
      for (String a : apps){
        System.out.println(a);
      }
    }

  @PreDestroy
  public void ending() {
    System.out.println("Hey there, I'm about to destroy the SimpleTest Bean...");
    debugApps();
  }

/* Getters and setters */
...

RSビーン:

@Named("aBean")
@RequestScoped
public class ABean implements Serializable{
    private static final long serialVersionUID = -7213673465118041882L;
    private ArrayList<String> myApps;
    private String str;
    @Inject
    private SimpleTest st;

  public void initStr(){
    if (myApps != null){
      for (String s : myApps){
        setStr(s);
      }
    }
  }

  @PostConstruct
  public void init(){
    setMyApps(st.getApps());
    initStr();
  }

    public String getErrs(){
      String errs = "I couldn't find the apps";
      if (myApps != null){
        errs = "I found the apps!";
      }
      if (str != null){
        errs = str;
      }
      return errs;
    }

    /* Getters and setters */
4

1 に答える 1

1

初期化する唯一の場所ArrayList<String> appscreateAppsメソッドですが、これは呼び出されず、クラスコンストラクターでも@PostConstruct装飾されたメソッドでもありません。simpleTestで飾る必要があるようです@PostConstruct

@PostConstruct
public void simpleTest() {
    //...
}
于 2013-11-08T20:04:00.880 に答える