#java #vaadin-flow #vaadin10
#java #vaadin-flow #vaadin10
Вопрос:
Я изучаю Vaadin Flow (Vaadin v10) и испытываю трудности с понятиями Route (@Route в качестве аннотации) и RouterLayout.
Из документации, которую я уже прочитал на веб-сайте Vaadin! Я не смог определить ответ на конкретный вопрос.
Может ли класс, реализующий RouterLayout, также быть определен как @Route?
@Route("")
public class MainLayout extends Div implements RouterLayout {
}
Пожалуйста (если возможно), предоставьте ссылку на некоторую документацию. Насколько я понимаю, RouterLayout
предназначен для отображения представлений в нем. Следовательно, при необходимости public void showRouterLayoutContent(HasElement content)
метод может быть переопределен для создания желаемого макета. Таким образом, размещение аннотации @Route, которая по существу определяет представление, не имеет смысла смешивать с RouterLayout?
Или это так? Если RouterLayout можно использовать с аннотацией @Route, предполагающей, что макет также является представлением; Может ли кто-нибудь предоставить мне простой сценарий, где это может быть полезно?
Ответ №1:
Как вы и сказали — на концептуальном уровне кажется странным иметь оба @Route
и RouterLayout
в одном классе. @Route
аннотации размещаются на конечных узлах. У вас может быть автономный @Route
, который будет помещен в <body>
элемент, или у вас может быть вложенный макет, где маршрут отображается внутри одного или нескольких родительских макетов. Родительский макет может быть указан со вторым параметром аннотации, например с
@Route(value = "users", layout = Dashboard.class)
public class Users extends Div {
//...
, где Dashboard
необходимо реализовать RouterLayout
. Таким образом, вы получили бы доступ к этому маршруту с помощью http://server-address-here/users
, и он отображался бы Users
внутри Dashboard
.
Если вы хотите иметь более описательный URL, вы могли бы реализовать это с @RoutePrefix
аннотацией на Dashboard
:
@RoutePrefix("dashboard")
public class Dashboard extends VerticalLayout implements RouterLayout {
// ...
и теперь вы получите Users
представление из http://server-address-here/dashboard/users
, в то время как в остальном все останется таким же, как раньше.
Комментарии:
1. спасибо за разъяснение. Не могли бы вы любезно указать мне на официальную документацию Vaadin / учебное пособие (что угодно как таковое), в котором четко указано, что нет смысла использовать
@Route
аннотацию при реализации классаRouterLayout
.2. Я не уверен, что такая документация существует. Зачем вам это нужно?
3. Мы находимся в процессе обновления кода Vaadin7 до Vaadin10. Много кода было перенесено таким образом, что не соблюдается разделение задач между макетами и представлениями. Поскольку не существует документации, в которой четко указывается этот макет, а не фактические представления, стало очень сложно аргументировать создание четкой архитектуры для нового приложения. Я принимаю ваш ответ здесь и благодарю вас за то, что уделили время. Однако было бы здорово, если бы такая концепция была четко упомянута в официальной документации. 🙂