SessionInitListener для портлета OSGI Vaadin 8.1

Я не могу понять, как добавить SessionInitListener в портлет OSGI Vaadin 8.1, работающий на Liferay 7.

В Vaadin 7 и Liferay 6.x это было сделано путем простого определения пользовательской реализации VaadinPortlet. Любая помощь приветствуется.


person Chris M    schedule 29.11.2017    source источник


Ответы (1)


Это возможно. Нет необходимости в специальной реализации портлета.

Все, что требуется, — это добавить SessionInitListener в метод инициализации пользовательского интерфейса.

 @Override
    protected void init(final VaadinRequest vaadinRequest) {


        vaadinRequest.getService().addSessionInitListener(this::sessionInit);

В сочетании с лямбдой вы можете манипулировать HTML следующим образом.

private void sessionInit(final SessionInitEvent sessionInitEvent) {
    sessionInitEvent.getSession().addBootstrapListener(new BootstrapListener() {
        @Override
        public void modifyBootstrapFragment(final BootstrapFragmentResponse response) {
            Element myDiv = new Element(Tag.valueOf("div"), "");
            myDiv.append("<h1>Extra HTML!</h1>");
            List<Node> nodes = response.getFragmentNodes();
            for (Node node : nodes) {
                myDiv.appendChild(node);
            }
            nodes.clear();
            nodes.add(myDiv);
        }

        @Override
        public void modifyBootstrapPage(final BootstrapPageResponse bootstrapPageResponse) {

        }
    });
}
person Chris M    schedule 05.06.2019