Element Composite
La classe ElementComposite sert de fondation polyvalente pour la gestion des éléments composites dans les applications webforJ. Son but principal est de faciliter l'interaction avec les éléments HTML, représentés par la classe Element, en fournissant une approche structurée pour gérer les propriétés, les attributs et les écouteurs d'événements. Elle permet la mise en œuvre et la réutilisation des éléments dans une application. Utilisez la classe ElementComposite lors de l'implémentation des Web Components pour une utilisation dans les applications webforJ.
Lors de l'utilisation de la classe ElementComposite, l'utilisation de la méthode getElement() vous donnera accès au composant Element sous-jacent. De même, la méthode getNodeName() vous donne le nom de ce nœud dans le DOM.
Il est possible de tout faire avec la classe Element elle-même, sans utiliser la classe ElementComposite. Cependant, les méthodes fournies dans la ElementComposite offrent aux utilisateurs un moyen de réutiliser le travail effectué.
Ce guide démontre comment implémenter le composant web QR code Shoelace en utilisant la classe ElementComposite.
Afficher le code
- Java
Descripteurs de propriété et d'attribut
Les propriétés et attributs dans les composants web représentent l'état du composant. Ils sont souvent utilisés pour gérer des données ou des configurations. La classe ElementComposite fournit un moyen pratique de travailler avec des propriétés et des attributs.
Les propriétés et attributs peuvent être déclarés et initialisés comme des membres PropertyDescriptor de la classe ElementComposite en cours d'écriture, puis utilisés dans le code. Pour définir des propriétés et des attributs, utilisez la méthode set() pour définir la valeur d'une propriété. Par exemple, set(PropertyDescriptor<V> property, V value) définit une propriété à une valeur spécifiée.
Les propriétés sont accessibles et manipulées en interne dans le code du composant et ne se reflètent pas dans le DOM. Les attributs, en revanche, font partie de l'interface externe du composant et peuvent être utilisés pour transmettre des informations à un composant depuis l'extérieur, fournissant ainsi un moyen pour des éléments ou des scripts externes de configurer le composant.
// Exemple de propriété appelée TITLE dans une classe ElementComposite
private final PropertyDescriptor<String> TITLE = PropertyDescriptor.property("title", "");
// Exemple d'attribut appelé VALUE dans une classe ElementComposite
private final PropertyDescriptor<String> VALUE = PropertyDescriptor.attribute("value", "");
//...
set(TITLE, "Mon Titre");
set(VALUE, "Ma Valeur");
En plus de définir une propriété, utilisez la méthode get() dans la classe ElementComposite pour accéder et lire les propriétés. La méthode get() peut prendre une valeur boolean optionnelle, qui est fausse par défaut, pour indiquer si la méthode doit faire un aller-retour au client pour récupérer la valeur. Cela a un impact sur les performances, mais peut être nécessaire si la propriété peut être modifiée uniquement sur le client.
Un Type peut également être passé à la méthode, ce qui indique vers quoi le résultat récupéré doit être converti.
Ce Type n'est pas clairement nécessaire et ajoute une couche supplémentaire de spécification lors de la récupération des données.
// Exemple de propriété appelée TITLE dans une classe ElementComposite
private final PropertyDescriptor<String> TITLE = PropertyDescriptor.property("title", "");
//...
String title = get(TITLE, false, String);
Dans la démo ci-dessous, des propriétés ont été ajoutées pour le QR code en fonction de la documentation du composant web. Des méthodes ont ensuite été mises en œuvre pour permettre aux utilisateurs d'obtenir et de définir les différentes propriétés mises en œuvre.
Afficher le code
- Java
Enregistrement des événements
Les événements permettent la communication entre différentes parties de votre application webforJ. La classe ElementComposite fournit une gestion des événements avec prise en charge du debouncing, throttling, filtrage et collecte de données d'événements personnalisés.
Inscrivez des écouteurs d'événements en utilisant la méthode addEventListener() :
// Exemple : Ajout d'un écouteur d'événement click
addEventListener(ElementClickEvent.class, event -> {
// Gérer l'événement de clic
});
Les événements de la ElementComposite sont différents des événements de Element, car cela ne permet aucune classe, mais uniquement les classes Event spécifiées.
Classes d'événements intégrées
webforJ fournit des classes d'événements préconstruites avec accès aux données typées :
- ElementClickEvent : Événements de clic de souris avec coordonnées (
getClientX(),getClientY()), informations sur le bouton (getButton()) et clés modificateurs (isCtrlKey(),isShiftKey(), etc.) - ElementDefinedEvent : Déclenché lorsqu'un élément personnalisé est défini dans le DOM et prêt à être utilisé
- ElementEvent : Classe d'événement de base fournissant l'accès aux données d'événement brutes, au type d'événement (
getType()) et à l'ID d'événement (getId())
Charge utile des événements
Les événements transportent des données du client vers votre code Java. Accédez à ces données via getData() pour les données d'événements brutes ou utilisez des méthodes typées lorsque disponibles sur les classes d'événements intégrés. Pour plus de détails sur l'utilisation efficace des charges utiles d'événements, voir le guide des événements.
Classes d'événements personnalisées
Pour un traitement d'événements spécialisé, créez des classes d'événements personnalisées avec des charges utiles configurées en utilisant les annotations @EventName et @EventOptions.
Dans l'exemple ci-dessous, un événement de clic a été créé puis ajouté au composant QR code. Cet événement, lorsqu'il est déclenché, affichera la coordonnée "X" de la souris au moment où l'utilisateur clique sur le composant, ce qui est fourni à l'événement Java en tant que données. Une méthode est ensuite mise en œuvre pour permettre à l'utilisateur d'accéder à ces données, qui est la façon dont elles sont affichées dans l'application.
Afficher le code
- Java
ElementEventOptions
ElementEventOptions vous permet de personnaliser le comportement des événements en configurant quelles données collecter, quand les événements se déclenchent et comment ils sont traités. Voici un extrait de code complet montrant toutes les options de configuration :
ElementEventOptions options = new ElementEventOptions()
// Collecter des données personnalisées depuis le client
.addData("query", "component.value")
.addData("timestamp", "Date.now()")
.addData("isValid", "component.checkValidity()")
// Exécuter JavaScript avant que l'événement ne se déclenche
.setCode("component.classList.add('processing');")
// Ne se déclenche que si les conditions sont remplies
.setFilter("component.value.length >= 2")
// Retarder l'exécution jusqu'à ce que l'utilisateur arrête de taper (300ms)
.setDebounce(300, DebouncePhase.TRAILING);
addEventListener("input", this::handleSearch, options);