Vaadin Flow: получить текущие параметры запроса во время onAttach

как надежно получить QueryParameters во время onAttach?

Ситуация:

Моему компоненту нужны эти параметры для целей конфигурации, и поскольку beforeEnter (который для удобства имеет .getLocation) не вызывается во время начальной загрузки, мне нужно получить ту же информацию во время onAttach.


ЗАМЕТКА:

Почему-то VaadinRequest.getCurrent() возвращает null


person Gerrit Sedlaczek    schedule 29.03.2019    source источник
comment
Можно ли использовать параметры URL вместо QueryParameters, потому что их намного проще обрабатывать, реализуя интерфейс HasUrlParameter в вашем представлении.   -  person Tatu Lund    schedule 29.03.2019
comment
Я попробую.   -  person Gerrit Sedlaczek    schedule 29.03.2019
comment
К сожалению, в моем случае это невозможно. Наша «архитектура» не обеспечивает прямой связи между макетами и их содержимым.   -  person Gerrit Sedlaczek    schedule 29.03.2019
comment
Интересно, что BeforeEvent, используемый setParameter, содержит местоположение. Я прочитал его в макете и связал с пользовательским интерфейсом с помощью ComponentUtils # setData. Во время onAttach моего компонента я снова прочитал значение.   -  person Gerrit Sedlaczek    schedule 29.03.2019
comment
Есть ли причины для отсутствия Location в AttachEvent? Если нет, я бы хотел открыть проблему на github.   -  person Gerrit Sedlaczek    schedule 29.03.2019


Ответы (1)


Хотя AttachEvent не знает Location, BeforeEvent setParameter знает.

Обходной путь (упрощенный):

@Route("workaround")
public class Workaround extends FlexLayout implements AttachNotifier, HasUrlParameter<String> {
    private Location currentLocation = null;

    /* ... */

    @Override
    public void setParameter(BeforeEvent event, @OptionalParameter String parameter) {
        // called before onAttach
        currentLocation = event.getLocation();
    }

    @Override
    protected void onAttach(AttachEvent attachEvent) {
        super.onAttach(attachEvent);

        QueryParameters qm = currentLocation.getQueryParameters();
        /* ... */
    }
}
person Gerrit Sedlaczek    schedule 05.04.2019