IStructuredSelection: использовать один и тот же выбор в 2 разных представлениях - PullRequest
0 голосов
/ 27 января 2019

Я использую TreeViewer со списком клиентов. Я добавил DoubleClickListener в TreeViewer.

this.treeViewer.addDoubleClickListener(new IDoubleClickListener() {
        @Override
        public void doubleClick(DoubleClickEvent event) {
            IStructuredSelection thisSelection = (IStructuredSelection) event
                    .getSelection();
            Object selectedNode = thisSelection.getFirstElement();

            if (selectedNode instanceof ICustomer) {
                ICustomer customer = (ICustomer) selectedNode;
                selectionService.setSelection(customer);

                perspective = (MPerspective) modelService
                        .find("de.checkpoint.rinteln.carlofon.perspective.customer",
                                app);
            }

            if (perspective != null) {
                partService.switchPerspective(perspective);
            }
        }
    });

В перспективе клиента у меня есть 2 представления, которые используют выбранного клиента для загрузки его данных (заказов и напоминаний) из БД.

В Customer-View все работает просто отлично. Но как только я перехожу к следующему представлению (Напоминание или Заказ), список выбора Null, который я не получаю.

@Inject
void setSelection(
        @Optional @Named(IServiceConstants.ACTIVE_SELECTION) ICustomer customer) {

    if (customer != null) {
        idText.setText("" + customer.getCustomerId());
        customerNameText
                .setText(customer.getFirstname() + " " + customer.getLastname());
        steetText.setText(customer.getStreet());
        cityText.setText(customer.getCity());
        steetCodeText.setText("" + customer.getCityCode());

    } else {
        // TODO Clear View!
    }
}

А в представлении напоминания (в том же ракурсе, что и представление покупателя) выбранным клиентом является ноль

@Inject
void setSelection(
        @Optional @Named(IServiceConstants.ACTIVE_SELECTION) ICustomer customer) {

    if (customer != null) {
        super.treeViewer.setInput(service.loadAll());
    } else {
        // TODO Clear View!
    }
}

Что привело к моему вопросу, я что-то пропустил? Разве я не должен использовать один и тот же выбор в разных видах?

Я должен добавить, что оба представления расширяют AbstractView, в котором реализован IDoubleClickListener.

...