Архитектура приложения jsf cdi

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

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

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

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

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

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

и orderFormController показывает событие с

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

}

и вот в чем проблема ^^ OrderFormController знает, что клиент был выбран, но должен ли он быть задан как invoiceRecipient или как получатель заказа?

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

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

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

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

1 ответ

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

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

Event<InvoiceRecipientSelected> invoiceRecipientSelected;
Другие вопросы по тегам