我有两个班级
@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 ??
我想知道处理这种情况的正确方法
答案 0 :(得分:2)
代表像Department和Employee这样的DB的类没有范围。您只需要在bean中定义范围并在注入diferente模型(如管理器)之后。如果你需要关联不同的模型(DB)你有不同的类型,如@OneToOne或@OneToMany等。