Aller au contenu principal

Navigational Frame Titles

Ouvrir dans ChatGPT

Dans webforJ, toutes les routes sont rendues au sein d'un Frame, qui sert de conteneur de niveau supérieur responsable de l'affichage du contenu de la route actuelle. Au fur et à mesure que les utilisateurs naviguent entre différentes routes, le titre du Frame est mis à jour dynamiquement pour refléter la vue active, aidant à fournir un contexte clair sur la position actuelle de l'utilisateur au sein de l'application.

Le titre d'un Frame peut être défini de manière statique à l'aide d'annotations ou dynamiquement par le code à l'exécution. Cette approche flexible permet aux développeurs de définir des titres qui s'alignent sur le but de chaque vue, tout en s'adaptant à des scénarios ou des paramètres spécifiques si nécessaire.

Titre du Frame avec annotations

La manière la plus simple de définir le titre d'un Frame dans la vue est d'utiliser l'annotation @FrameTitle. Cette annotation vous permet de définir un titre statique pour n'importe quel composant de route, qui est ensuite appliqué au Frame lorsque le composant est rendu.

Utilisation de l'annotation @FrameTitle

L'annotation @FrameTitle est appliquée au niveau de la classe et vous permet de spécifier une valeur de chaîne qui représente le titre de la page. Lorsque le routeur navigue vers un composant avec cette annotation, le titre spécifié sera automatiquement défini pour la fenêtre du navigateur.

Voici un exemple :

@Route
@FrameTitle("Tableau de bord")
public class DashboardView extends Composite<Div> {
public DashboardView() {
// logique de vue
}
}

Dans cet exemple :

  • La classe DashboardView est annotée avec @Route pour définir la route.
  • L'annotation @FrameTitle("Tableau de bord") définit le titre du Frame sur "Tableau de bord".
  • Lorsque l'utilisateur navigue vers /dashboard, le titre du Frame sera automatiquement mis à jour avec la valeur spécifiée.

Cette méthode est utile pour les routes qui ont un titre statique et qui ne nécessitent pas de mises à jour fréquentes en fonction du contexte de la route.

@AppTitle et @FrameTitle

Si le titre de l'application est défini, le titre du Frame l'incorporera. Par exemple, si l'application définit le titre comme @AppTitle("webforJ") et que le titre du Frame est défini comme @FrameTitle("Tableau de bord"), le titre final de la page sera Tableau de bord - webforJ. Vous pouvez personnaliser le format du titre final dans l'annotation @AppTitle en utilisant l'attribut format si nécessaire.

Titres de Frame dynamiques

Dans les cas où le titre du Frame doit changer dynamiquement en fonction de l'état de l'application ou des paramètres de route, webforJ fournit une interface appelée HasFrameTitle. Cette interface permet aux composants de fournir un titre de Frame en fonction du contexte de navigation actuel et des paramètres de route.

Implémentation de l'interface HasFrameTitle

L'interface HasFrameTitle contient une méthode unique getFrameTitle(), qui est invoquée avant que le titre du Frame ne soit mis à jour. Cette méthode offre la flexibilité de générer un titre dynamiquement en fonction du contexte de navigation ou d'autres facteurs dynamiques.

@Route("profile/:id")
public class ProfileView extends Composite<Div> implements HasFrameTitle {

public ProfileView() {
getBoundComponent().add(new H1("Page de profil"));
}

@Override
public String getFrameTitle(NavigationContext context, ParametersBag parameters) {
// Définir dynamiquement le titre du Frame en utilisant les paramètres de route
String userId = parameters.get("id").orElse("Inconnu");
return "Profil - Utilisateur " + userId;
}
}

Dans cet exemple :

  • Le composant ProfileView implémente l'interface HasFrameTitle.
  • La méthode getFrameTitle() génère dynamiquement un titre en utilisant le paramètre id de l'URL.
  • Si la route est /profile/123, le titre sera mis à jour sur "Profil - Utilisateur 123".
Combinaison d'annotations et de titres dynamiques

Vous pouvez combiner à la fois des méthodes statiques et dynamiques. Si un composant de route a à la fois une annotation @FrameTitle et implémente l'interface HasFrameTitle, le titre fourni dynamiquement par getFrameTitle() prévaudra sur la valeur statique de l'annotation.