在SessionScoped bean中注入SessionScoped列表

时间:2014-08-27 08:02:58

标签: java-ee jsf-2 cdi

我有两个班级

@SessionScoped
public class Department {
    private List<Employee> employees;
    //Getters and setters
}

和员工类

@SessionScoped
public class Employee {
    private int id;
    private String name;
    //Getters and setters
}

在我的控制器中,我从服务层检索数据,并尝试填充部门。这就是我的控制器的样子。

public class MyController {
    @Inject
    private Department department;
}

如果我使用 new 关键字来构建CDI托管bean的实例,那么我过去遇到了麻烦。我可以使用new创建一个ArrayList,使用new构造Employee实例,将它们添加到列表中,然后在department bean中设置列表。有人可以告诉我在托管bean部门填充员工列表(托管bean)的正确方法是什么。请记住,范围界定需要适用。范围可能同样是@ViewAccessScoped

我的解决方案是

@SessionScoped
public class Department {

    @Produces
    @SessionScoped
    private List<Employee> employees = new ArrayList();

    public add(Employee e) {
        employees.add(e);
    }
    //Getters and setters

}

不太确定这是否是接近它的正确方法,因为任何注入员工列表的人都会得到这个SessionScoped ArrayList ??

我想知道处理这种情况的正确方法

1 个答案:

答案 0 :(得分:2)

代表像Department和Employee这样的DB的类没有范围。您只需要在bean中定义范围并在注入diferente模型(如管理器)之后。如果你需要关联不同的模型(DB)你有不同的类型,如@OneToOne或@OneToMany等。