Архитектура приложения JSF CDI

У меня проблема с архитектурой со следующим вариантом использования.

У меня есть страница JSF для создания объектов JPA, например заказов.

Сущность Order имеет два поля: invoiceRecipient и получатель. Оба типа Заказчик.

В форме заказа есть два поля, каждое с кнопкой, которая открывает список выбора для выбора клиента из customerSelectionController.

когда клиент выбран, bean-компонент customerSelectionController делает что-то вроде:

@Inject
@Selected 
Event<Customer> customerSelectedEvent;
public void select(Customer customer) {
    customerSelectedEvent.fire(customer);
}

и orderFormController возвращает событие с

public void customerSelected(@Observes @Selected Customer customer) {

}

и вот в чем проблема ^^ Контроллер формы заказа знает, что клиент был выбран, но предназначен ли он для установки в качестве получателя счета или получателя заказа?

Я знаю, что вы могли бы указать более точные квалификаторы, такие как @SelectedAsInvoiceRecipient, но действительно ли это так, как это сделать?

Должен ли я скопировать bean-компонент customerSelectionController в качестве invoiceRecipientSelectionController и ReceiverSelectionController и позволить им обоим запускать объекты Customer с разной квалификацией?

Я также использую Apache Deltaspike, который поддерживает GroupedConversations и другие сложные вещи, но я не смог найти указанное правило, как этого добиться.

Спасибо за вашу помощь


person hidehawk    schedule 28.08.2014    source источник


Ответы (1)


Вы можете либо использовать квалификаторы, либо обернуть свою сущность Customer более конкретным типом события, например.

public class InvoiceRecipientSelected {
    private Customer customer;
    // ... add accessors ...
}

Event<InvoiceRecipientSelected> invoiceRecipientSelected;
person Harald Wellmann    schedule 29.08.2014