Vaadin Flow: настройка названия - PullRequest
9 голосов
/ 10 мая 2019

Я сейчас пытаюсь установить title страницы.


Сценарий

public class A extends FlexLayout implements RouterLayout {}

@Route(value = "b", layout = A.class)
public class B extends FlexLayout{}
@Route(value = "c", layout = A.class)
public class C extends FlexLayout{}

Попытки

  1. Для этого я пытался позвонить UI.getCurrent().getPage().setTitle("demo title") во время afterNavigation.К сожалению, это не работает для начальной навигации (и ни один не работал при добавлении attachListener).

  2. Я также попытался настроить его, используя PageConfigurator на внешней RouterLayout, как это:

    @Override
    public void configurePage(InitialPageSettings settings) {
        settings.addMetaTag("title", "demo title");
        settings.addMetaTag("og:title", "demo title");

        settings.addFavIcon("icon", "frontend/images/favicon.ico", "48x48");
    }
HasDynamicTitle, кажется, работает, только если реализующий класс также определяет @Route, но не инкапсулирующий RouterLayout

Issue

По какой-то причинеRouter сам устанавливает заголовок во время навигации.

Stacktrace of the setTitleCall

Router определяет заголовок с помощью JS и переопределяет document.title, тогда как Page.setTitle кажетсяизменить только тег html.head.title.


Вопрос

Как установить заголовок в одном месте?
Как можно запретить настройке формы Routertitle к значению текущего URL?


Примечание

Использование аннотации @PageTitle не вариант, так как в моем случае заголовок неизвестен во время компиляции.

1 Ответ

0 голосов
/ 22 мая 2019

Глядя на ваш комментарий, я предполагаю, что вы выяснили это как-то по причинам полноты и других людей, которые могут бороться с этим:

Официальная документация Vaadin Flow предлагает использовать HasDynamicTitle,См. Следующий пример:

@Route(value = "blog")
class BlogPost extends implements HasDynamicTitle, HasUrlParameter<Long> {
  private String title = "";

  @Override
  public String getPageTitle() {
    return title;
  }

  @Override
  public void setParameter(BeforeEvent event,
        @OptionalParameter Long parameter) {
    if (parameter != null) {
      title = "Blog Post #" + parameter;
    } else {
      title = "Blog Home";
    }
  }
}

Если у вас есть статический заголовок страницы, вы можете просто установить его с аннотацией:

@PageTitle("home")
class HomeView extends Div {

  HomeView(){
    setText("This is the home view");
  }
}

Источник

...