2014-08-27 4 views
0

У меня есть два классаИнъекционного список SessionScoped в бобе SessionScoped

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

Я в прошлом столкнулся с проблемой, если я использовал нового ключевого слова для создания экземпляров для CDI управляемых компонентов. Могу ли я просто создать ArrayList с помощью new, создать экземпляры Employee с помощью new, добавить их в список и затем установить список в компоненте отдела. Может ли кто-нибудь рассказать мне, что является правильным способом заполнить список сотрудников (управляемые компоненты) в отделе управляемых компонентов. Помните, что необходимо использовать область охвата. Объем мог бы одинаково хорошо были @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? ?

Я хочу знать правильный способ справиться с этой ситуацией

+2

Общая проблема проектирования заключается в том, что ваши объекты созданы управляемыми бобами. Фактически, только «MyController» является подходящим кандидатом для управления управляемым компонентом. Это будет длинная и несколько субъективная история, которая технически лучше подходит для программистов.se, но вы можете предположить, что этот ответ применим и к вашему делу: http://stackoverflow.com/questions/25431338/why-shouldnt- entity-bean-be-managed-by-jsf-framework/ – BalusC

+0

BalusC, это не сущности JPA, а скорее как упрощенный объект Model, который используется для представления информации, отображаемой в представлении. Вы могли бы зайти так далеко, чтобы сказать, что Объекты, возвращаемые DAO или уровнем сервиса, должны быть переведены в простые объекты модели для представления, если это имеет смысл. – user1299508

+0

Ах, хороший 'ol DTO. Ну, возможно ... Это все еще кажется неправильным. Увы, субъективный вопрос. Попробуйте programers.se или «старомодный» дискуссионный форум. Переполнение стека в качестве сайта Q & A не подходит для обсуждения. – BalusC

ответ

2

Классы, которые представляют собой БД, как Департамент и Работник не имеют сферу. Вам нужно только определить область действия в bean-компоненте и после ввода моделей diferente (например, менеджеров). Если вам нужно связать разные модели (из БД), у вас есть разные типы, такие как @OneToOne или @OneToMany или т. Д.

Смежные вопросы