En Adélia Web, la déclaration des colonnes des objets graphiques Adélia LISTE ou TABLE LISTE se fait en insérant des objets Adélia à l'intérieur de l'objet liste.

Tous les objets Adélia placés entre les balises <adelia:tablelist> (ou <adelia:b_list />) et </adelia:tablelist> (ou <adelia:e_list />) sont considérés comme étant des colonnes de l'objet liste associé.
Lors de l'affichage de l'objet liste, tous les objets colonnes font partie du flux HTML constituant la structure de l'objet liste.
Une colonne représente une information (une donnée) qui peut être visible ou invisible à l'utilisateur lors de l'affichage de l'objet liste.

Avec Adélia Web V11 PTF 7, comment définir une colonne non visible à l'utilisateur ?

Un exemple : Soit une liste de 500 livres à afficher. Un livre est défini par :
- un titre (ALPHA de 30),
- un auteur (ALPHA de 30),
- un numéro ISBN (identifiant unique) NUM_BIN_8,
- une liste de mots clés représentant les thèmes du livre (ALPHA de 50).

Seules les informations titre et auteur doivent être présentées à l'utilisateur. Les informations liste de mots clés et numéro ISBN ne servent qu'à faire des recherches dans la liste de livres.

Dans notre exemple, l'affichage d'une liste de 500 livres avec les informations Titre et Auteur représente un poids de 193 Ko.

On présente quatre solutions, par ordre croissant d'intérêt :

Solution 1

Les informations liste de mots clés et numéro ISBN sont associées chacune à un objet champ de saisie ayant le style "caché" :

 

<table cols="2" width="75%" border="1" cellpadding="1" cellspacing="1">
<thead>
<tr>
<td>Auteur</td>
<td>Titre</td>
</tr>
</thead>
<tbody><adelia:tablelist name="TBL_LIVRES">
<tr>
<td><adelia:outputfield name="CHO_AUTEUR" type="ALPHA" length="30" refc="false"/></td>
<td>
<adelia:outputfield name="CHO_TITRE" type="ALPHA" length="30" refc="false"/>
<adelia:entryfield type="NB8"><input type="hidden" name="CHS_ISBN" id="CHS_ISBN"/></adelia:entryfield>
<adelia:entryfield type="ALPHA" length="50" ><input type="hidden" name="CHS_MOTS_CLES" id="CHS_MOTS_CLES" /></adelia:entryfield>
</td>
</tr>
</adelia:tablelist></tbody>
</table>

 

L'inconvénient majeur de cette solution est que les informations liste des mots clés et numéro ISBN sont associées à un tag HTML <INPUT> qui fera partie du flux HTML de la page lors de l'affichage de l'objet liste : le "poids" de la page à afficher est augmenté de 36 % (poids de la page résultat 301 Ko).
Le temps d'affichage de la page (temps de transit réseau de la requête HTTP et temps d'analyse du flux HTML par le navigateur) est augmenté très sensiblement.

Solution 2 

Conditionner la présence des informations liste de mots clé et numéro ISBN pour que ces informations de soient pas présentes dans le flux HTML de l'objet liste.
Pour cela, il faut englober les balises contenants ces informations par une balise Adélia Condition : Les informations liste de mots clés et numéro ISBN peuvent alors être associées chacune à un objet champ en sortie.

 

<table cols="2" width="75%" border="1" cellpadding="1" cellspacing="1">
<thead>
<tr>
<td>Auteur</td>
<td>Titre</td>
</tr>
</thead>
<tbody><adelia:tablelist name="TBL_LIVRES">
<tr>
<td><adelia:outputfield name="CHO_AUTEUR" type="ALPHA" length="30" refc="false"/></td>
<td>
<adelia:outputfield name="CHO_TITRE" type="ALPHA" length="30" refc="false"/>
<adelia:b_cond name="CND_INFOS_INVISIBLES" />
<adelia:outputfield name="CHO_ISBN" type="NB8" refc="false"/>
<adelia:outputfield name="CHO_MOTS_CLES" type="ALPHA" length="50" refc="false"/>
<adelia:e_cond />
</td>
</tr>
</adelia:tablelist></tbody>
</table>



L'inconvénient majeur de cette solution est l'ajout d'une nouvelle colonne CND_INFOS_INVISIBLES de type BOOL, ce qui implique :
- Au niveau programmation L4G, lors du chargement de la liste de livres, ne pas oublier d'initialiser CND_INFOS_INVIBLES à *VRAI (valeur par défaut *FAUX),
- Au niveau sémantique, on ajoute pour chaque ligne (chaque livre) une information supplémentaire booléenne qui n'a rien à voir avec la nature d'un livre,
- Au niveau performance, la taille mémoire du programme est augmenté de 500 booléens (soit 500 octets).

Solution 3 

Cette solution est identique à la solution 2 (les informations liste de mots clés et numéro ISBN sont associées chacune à un objet champ en sortie) mais ces informations sont rendues non visible par programmation en fixant chaque propriété VISIBLE à *FAUX.

 

<table cols="2" width="75%" border="1" cellpadding="1" cellspacing="1">
<thead>
<tr>
<td>Auteur</td>
<td>Titre</td>
</tr>
</thead>
<tbody><adelia:tablelist name="TBL_LIVRES">
<tr>
<td><adelia:outputfield name="CHO_AUTEUR" type="ALPHA" length="30" refc="false"/></td>
<td>
<adelia:outputfield name="CHO_TITRE" type="ALPHA" length="30" refc="false"/>
<adelia:outputfield name="CHO_ISBN" type="NB8" refc="false"/>
<adelia:outputfield name="CHO_MOTS_CLES" type="ALPHA" length="50" refc="false"/>
</td>
</tr>
</adelia:tablelist></tbody>
</table>

 

L'inconvénient majeur de cette solution est l'obligation de manipuler la propriété VISIBLE, ce qui implique :
- Au niveau programmation L4G, lors du chargement de la liste de livres, ne pas oublier d'initialiser cette propriété à *FAUX,
- Au niveau performance, la taille mémoire du programme est augmenté de 2 * 500 booléens (soit 1000 octets) : En effet, chaque propriété (d'un objet colonne d'une liste) qui est manipulée dans le programme est stockée dans la liste mémoire associée.

Solution 4

Conditionner la présence des informations liste de mots clé et numéro ISBN pour que ces informations de soient pas présentes dans le flux HTML de l'objet liste.
Pour cela, il faut englober les balises contenants ces informations par une scriptlet JSP ayant une syntaxe compatible avec le XTHML (syntaxe utilisée pour définir les maquettes des pages Adélia Web) :

<table cols="2" width="75%" border="1" cellpadding="1" cellspacing="1">
<thead>
<tr>
<td>Auteur</td>
<td>Titre</td>
</tr>
</thead>
<tbody><adelia:tablelist name="TBL_LIVRES">
<tr>
<td><adelia:outputfield name="CHO_AUTEUR" type="ALPHA" length="30" refc="false"/></td>
<td>
<adelia:outputfield name="CHO_TITRE" type="ALPHA" length="30" refc="false"/>
<jsp:scriptlet> if (false) { </jsp:scriptlet>
<adelia:outputfield name="CHO_ISBN" type="NB8" refc="false"/>
<adelia:outputfield name="CHO_MOTS_CLES" type="ALPHA" length="50" refc="false"/>
<jsp:scriptlet> } </jsp:scriptlet>
</td>
</tr>
</adelia:tablelist></tbody>
</table>

Cette solution n'offre que des avantages :
- pas d'augmentation du poids de la page,
- pas d'ajout de nouvelles colonnes dans l'objet liste ou d'informations superflue.

Articles connexes