Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Sämtliche Views einer Anwendung müssen beim Navigator registriert werden. Der Navigator  

  • verwaltet die registrierten Views in einer Liste
  • weist jeder registrierten View eine eindeutige URI zu, mit der zur Laufzeit der direkte Aufruf der View über die Suchleiste des Browsers möglich ist, sofern der Anwender die entsprechende Berechtigung dazu besitzt.
  • ermöglicht den Aufruf der View mit der einfachen Methode navigateTo() ohne Angabe der URI 
  • nimmt aufgerufene Views zur Laufzeit in die Browser-History auf, und ruft diese bei Browser Vor- und Zurück-Aktionen automatisch auf
  • zeigt die View an der festgelegten Stelle an

Die MainView wird automatisch als erste View in den Navigator eingetragen. Views müssen nicht in den Navigator eingetragen werden, wenn

  • diese nicht durch Eingabe einer URI aufrufbar sein sollen

 

Der Navigator ist ein wichtiger Bestandteil der MainUI. Er ermöglicht es zwischen den verschiedenen Views einer Anwendung zu navigieren und kümmert sich automatisch um den korrekten Aufruf von Views bei Browser Vor- und Zurück Aktionen. Dazu müssen Sie die einzelnen Views initial beim Navigator registrieren und festlegen, wo genau die Views angezeigt werden sollen, z.B. in einem Layout, in einer UI-Komponente oder direkt in der MainUI. Sämtliche Einstellungen lassen sich über Properties vornehmen.  Anschließend lässt sich jede View mit der einfachen Methode navigateTo() aufrufen. Der Navigator ist keine UI-Komponenten, wird jedoch unter Structure angezeigt, um diesen selektieren und via Properties konfigurieren zu können.

...

 

 

 Um eine View aufrufen zu können, braucht diese einen Pfad, welcher auch als Route bezeichnet wird.

  1. Zuerst müssen Sie das Root-Element der View auswählen
  2. Danach unter Routing > Route einen beliebigen Pfad angeben. (Kann auch ein leerer String sein)

Image Added

Hinweis:

  • Jede Route muss unique sein. Es können nie gleichzeitig mehrere Views mit der gleichen Route existieren

Um zu einer anderen View zu navigieren, gibt es mehrere Möglichkeiten.

  1. Ziehen Sie einen RouterLink auf die View
  2. Klicken Sie in den Properties auf NavigationTarget
    Image Added
  3. Im folgenden Dialog können Sie nach Ihrer View suchen, zu der dieser Link navigieren soll


Der Server kann auch eine Navigation auslösen. Um das zu erreichen können Sie folgendes machen:

  1. Ziehen Sie einen Button auf die View
  2. Doppelklicken Sie den Button
  3. Geben Sie danach folgenden Code ein:

    Code Block
    languagejava
    themeConfluence
    UI.getCurrent().navigate(OtherView.class)


Manchmal müssen auch verschiedene Information an die aufzurufende View weitergegeben werden. Dazu können die folgenden Code-Snippets benutzt werden:

Code Block
languagejava
themeConfluence
// Es können Datentypen wie z.B. String übergeben werden
UI.getCurrent().navigate(OtherView.class, "Hallo Welt");


In OtherView.class muss das HasUrlParameter<String> Interface implementiert werden
Um dort jetzt den Parameter zu bekommen, muss folgende Methode implementiert werden:

Code Block
languagejava
themeConfluence
@Override
public void setParameter(final BeforeEvent event, final String parameter)
{
	System.out.println("Parameter was " + parameter);
}

Es können unter anderen auch Query Parameter übergeben werden. Mehr dazu kann hier nachgelesen werden: https://vaadin.com/docs/v14/flow/routing/tutorial-router-url-parameters

Es können aber auch mit Hilfe des RapidClipse Frameworks ganze Objekte übergeben werden.

Code Block
languagejava
themeConfluence
Navigation.To(OtherView.class)
			.withParameter("myData", myData)
			.navigate();


Dazu muss in OtherView.java folgendes implementiert werden:

Code Block
languagejava
themeConfluence
@NavigationParameter
private MyDataType myData;

@Override
public void navigationParametersUpdated()
{
	System.out.println("myData is now available!");
}

Hinweis:

  • navigationParametersUpdated() muss nicht implementiert werden.
  • Mit .withParameter() kann ein beliebiger Datentyp übergeben werden.