0 votes
asked in UI & GUI-Builder by (180 points)
edited by

Hallo,
ich möchte bei der Navigation zwischen zwei UI-Klassen ein eigenes Objekt übergeben.

Die Vorgehensweise habe ich von dieser Anleitung für RapidClipse X. à https://rapidclipse.atlassian.net/wiki/spaces/RCXDOCDE/pages/657162323/Navigation

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

Navigation.To(OtherView.class).withParameter("myData", myData).navigate();

Dazu muss in OtherView.java folgendes implementiert werden:

@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.

Leider wird mein Objekt nicht an die Zielklasse übertragen, es ist immer null.

Beispiel:

Quellklasse:

final SelectSolution selectSolution = new SelectSolution();

Navigation.To(PageSolConfigurator.class)
                    .withParameter("selectSolution", selectSolution)
                    .navigate();

Zielklasse:

@HtmlImport("frontend://bower_components/vaadin-lumo-styles/all-imports.html")
@RedirectView
@Route("configure")
@Theme(value = PFTheme.class)
public class PageSolConfigurator extends VerticalLayout implements PageConfigurator, HasSettings
{
     @NavigationParameter
     private SelectSolution selectSolution;

}

 Soweit ich das verstehe, muss die Zielklasse das Interface HasUrlParameter<String> für diese Variante nicht implementieren.

Auch die optionale Methode kann nicht mit @Override überschrieben werden, da offensichtlich eine entsprechende Superklasse fehlt. Muss hier evtl. ein anderes Interface implementiert werden?

The method navigationParametersUpdated() of type PageSolConfigurator must override or implement a supertype method

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

Vielen Dank für die Unterstützung

M. Güttler

2 Answers

+1 vote
answered by (180 points)

Hallo,
dann löse ich mal auf ... ;-)

Damit ein Objekt übergeben werden kann, muss das Ziel-UI das Interface HasNavigationParameters implementieren.

import com.rapidclipse.framework.server.navigation.HasNavigationParameters;

public class UIClass extends VerticalLayout
	implements HasNavigationParameters
{
    .....
}

Dies wird in der RapidClipse-Dokumentation leider nicht erwähnt ...

Falls man dann, wie in meinem Fall, die Daten des Objekts zum Aufbau der UI-Komponenten nutzen möchte, muss man die Methode navigationParametersUpdated() implementieren und seine Anpassungen von dort aus vornehmen. Diese wird von dem Interface aufgerufen, nachdem das Objekt initialisiert ist. Die üblichen init-Methoden sind zu diesem Zeitpunkt bereits alle abgearbeitet.
@Override
public void navigationParametersUpdated()
{
    System.out.println("myData is now available!");
}

@XDEV Bitte aktualisiert eure Dokumentation!

Viele Grüße
M. Güttler

0 votes
answered by (2.2k points)
Es gibt noch eine Alternative dazu. Bei Absender GUI Klasse:

UI.getCurrent().getSession().setAttribute(MyObject.class, myObject);

Bei Empfänger GUI Klasse:

MyObject myObject = (MyObject) UI.getCurrent().getSession().getAttribute();
Welcome to Rapidclipse Q&A, where you can ask questions and receive answers from other members of the community.
Powered by Question2Answer
...