XPAGES : Astuce pour accéder à une variable d’un Repeater depuis l’extérieur.

Accéder à une variable déclarée dans un Repeater est facile quand on est à l'intérieur de celui-ci. En revanche cette variable est beaucoup plus difficilement accessible depuis l'extérieur.
Voici une petite astuce pour y accéder facilement.

Etape 1 : Modification du Repeater.

Le Repeater doit être calculé à la création de la page : dans l’onglet propriétés, partie options, cocher la case « Create controls at page creation »
A noter que la sélection de cette option empêche ensuite de modifier dynamiquement le Repeater, cela peut donc créer des effets de bord. (Rafraichissement partiel impossible)
Donner un nom à la variable IndexName (indexData dans l’exemple).
Etape 1
Pour faire cette action sans passer par l’interface graphique il faut ajouter repeatControls="true" et indexVar="indexData" à la déclaration du Repeater.
<xp:repeat id="repeat1" rows="30" value="#{view1}" repeatControls="true" var="rowData" indexVar="indexData"></xp:repeat>

Etape 2 : Modification des ID.

Une fois l’étape 1 réalisée, on va donner une ID dynamique aux éléments contenus dans le Repeater. Pour cela il faut utiliser la variable Index Name définie dans l’étape 1.
A chaque itération du Repeater, la variable indexData est incrémentée, elle permet donc de se situer dans le Repeater. On va l’utiliser pour définir dynamiquement l’ID d’un champ texte.
Etape 2

L’interface graphique ne permet pas d’utiliser des variables dans la définition des ID des éléments, il faut donc éditer directement la source XML.
Etape 2 Script
<xp:repeat id="repeat1" rows="30" value="#{view1}" repeatControls="true" var="rowData" indexVar="indexData"><xp:inputText id="inputText1_${indexData}"></xp:inputText></xp:repeat>

Accès aux données

Chaque champ texte généré aura une ID unique composé de "inputText1_" et de l’index.
Chacun de ces champs est accessible via JSS (Javascript Server Side)
Par exemple pour accéder au 3ème champ texte du Repeater on utilisera la syntaxe suivante :
getComponent('inputText1_3').getValue()
Script

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.