Siirry pääsisältöön

Routes Registration

Avaa ChatGPT:ssä

Rekisteröinnin lisäksi reittiä @Route -annotaatioiden avulla on mahdollista rekisteröidä, päivittää tai poistaa reittejä dynaamisesti suoritusajon aikana sovelluksen logiikan, käyttäjäroolien tai muiden ehtojen perusteella. Tämä joustavuus mahdollistaa navigoinnin hallinnan dynaamisemmin, sen sijaan että reitit määritellään staattisesti käännösaikana.

Reittien dynaaminen rekisteröinti

Voit rekisteröidä reitin dynaamisesti käyttämällä RouteRegistry-luokkaa, joka on saatavilla Routerin kautta. Tämä mahdollistaa uusien reittien lisäämisen suoritusaikana, mikä mahdollistaa joustavan navigoinnin.

Esimerkki: Dynaamisen reitin rekisteröinti

Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();

// Rekisteröi asetusten reitti dynaamisesti
registry.register("/settings", SettingsView.class);

// Siirry asetusten näkymään
router.navigate(SettingsView.class);

Tässä esimerkissä /settings-reitti rekisteröidään dynaamisesti, ja sovellus navigoi juuri rekisteröityyn näkymään.

Ehdollinen reittien rekisteröinti

Usein reittejä on lisättävä tai poistettava tietyistä ehdoista, kuten käyttäjärooleista tai sovelluksen tilasta. Dynaamisen reitityksen avulla voit rekisteröidä tai poistaa reittejä ehdollisesti suoritusaikana.

Esimerkki: Ehdollinen rekisteröinti käyttäjäroolen perusteella

Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();

// Tarkista käyttäjärooli ja rekisteröi sopivat reitit
if (user.hasRole("editor")) {
registry.register("/editor/dashboard", EditorDashboardView.class);
} else if (user.hasRole("viewer")) {
registry.register("/viewer/dashboard", ViewerDashboardView.class);
}

// Siirry sopivaan hallintapaneeliin
if (user.hasRole("editor")) {
router.navigate(EditorDashboardView.class);
} else if (user.hasRole("viewer")) {
router.navigate(ViewerDashboardView.class);
}

Tässä esimerkissä:

  • /editor/dashboard tai /viewer/dashboard reitti rekisteröidään dynaamisesti käyttäjän roolin perusteella.
  • Sovellus navigoi sopivaan hallintapaneeliin käyttäjän käyttöoikeuksien mukaan.

Reittien poistaminen

Juuri kuten reittejä voidaan lisätä dynaamisesti, niitä voidaan myös poistaa suoritusaikana, kun niitä ei enää tarvita tai kun sovelluksen konteksti muuttuu.

Esimerkki: Rekisteröidyn reitin poistaminen

Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();

// Poista reitti asetusten näkymälle
registry.unregister("/settings");

// Vaihtoehtoisesti, poista komponenttaluokan mukaan
registry.unregister(SettingsView.class);

Tässä esimerkissä /settings-reitti poistuu dynaamisesti, kun sitä ei enää tarvita.

Reittien rekisteröinti sovelluksen käynnistyksessä

Voit rekisteröidä dynaamisia reittejä sovelluksen alustusvaiheessa, jolloin tietyt näkymät ovat saatavilla ympäristöstä tai asetuksista riippuen käynnistyksen aikana.

Esimerkki: Reittien rekisteröinti sovelluksen käynnistyksen aikana

@Routify
public class Application extends App {

@Override
protected void onWillRun() {
// Rekisteröi debug-näkö vain kehitysmoodissa
if (Environment.getCurrent().isDebug()) {
Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();

registry.register("/debug", DebugView.class);
}
}
}

Tässä esimerkissä:

  • DebugView rekisteröidään dynaamisesti sovelluksen käynnistyessä, mutta vain jos sovellus toimii kehitysmoodissa.

@Route-annotoidun komponentin dynaaminen rekisteröinti

Lisäksi manuaalisten reittien määrittämisen ohella on mahdollista rekisteröidä dynaamisesti komponentteja, jotka on jo merkitty @Route-annotaatiolla. Tämä on hyödyllistä, kun haluat käyttää etukäteen merkittyjä luokkia, mutta rekisteröidä ne dynaamisesti sovelluksen logiikan perusteella.

Esimerkki: @Route-annotoidun komponentin rekisteröinti

@Route("profile")
public class ProfileView extends Composite<Div> {
// Profiilinäkymän logiikka
}

Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();

// Rekisteröi ProfileView dynaamisesti sen @Route-annotaation kanssa
registry.register(ProfileView.class);

// Siirry ProfileVieween
router.navigate(ProfileView.class);

Tässä esimerkissä:

  • ProfileView-luokka on merkitty @Route("profile").
  • Reitti rekisteröidään dynaamisesti suoritusaikana käyttäen registry.register(ProfileView.class).

Reittien rekisteröinti kokonaisesta paketista

Jos sovelluksessasi on suuri määrä reittejä, jotka on järjestetty pakettiin, voit rekisteröidä kaikki @Route-annotoidut komponentit paketin dynaamisesti.

Esimerkki: Kaikkien reittien rekisteröinti paketista

Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();

// Rekisteröi kaikki reitit "com.myapp.admin" paketista
RouteRegistry.ofPackage(new String[] { "com.myapp.admin" }, registry);

Tässä esimerkissä:

  • ofPackage-metodi skannaa com.myapp.admin-paketin ja rekisteröi kaikki @Route-annotaatiolla varustetut luokat.
  • Tämä on erityisen hyödyllistä suurissa sovelluksissa, joissa on lukuisia reittejä, jotka on järjestetty paketteihin.

Rekisteröityjen reittien hakeminen

Voit käyttää RouteRegistry-luokkaa saadaksesi listan kaikista dynaamisesti rekisteröidyistä reiteistä. Tämä on hyödyllistä, kun sinun on hallittava tai näytettävä saatavilla olevia reittejä ohjelmallisesti.

Esimerkki: Rekisteröityjen reittien hakeminen ja näyttäminen

Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();

List<RouteEntry> routes = registry.getAvailableRouteEntires();
routes.forEach(route -> console().log("Polku: " + route.getPath()));

Tässä esimerkissä sovellus saa kaikki tällä hetkellä rekisteröidyt reitit ja tulostaa niiden polut.

Reitti-aliasien hallinta dynaamisesti

webforJ mahdollistaa useiden aliasien rekisteröinnin yhdelle näkymälle. Tämä tarkoittaa, että käyttäjät voivat käyttää samaa näkymää eri URL-reittien kautta.

Esimerkki: Reitti-aliasien rekisteröinti dynaamisesti

Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();

// Rekisteröi pääreitti
registry.register("/contact", ContactView.class);

// Rekisteröi aliasit contact-näkymälle
registry.register("/support", ContactView.class);
registry.register("/help", ContactView.class);

Tässä esimerkissä ContactView on saavutettavissa kolmen eri polun kautta: /contact, /support ja /help.