Routes Registration
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 skannaacom.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
.