TP d’applications web
Javascript dans l’application bibliographie

Dans ce TP, on souhaite modifier la page qui liste toutes les références de notre bibliographie (listAll.jsp). L’idée ici est de créer le formulaire sur place en javascript au lieu d’ouvrir une nouvelle page :

Dans les deux cas le bouton « confirmer » envoie les données de formulaire et exécute donc l’action correspondante, et le bouton « annuler » restaure l’affichage normal.

On propose d’implémenter ceci dans une fonction javascript à 4 paramètres formularise(lien, event, id, action). Pour simplifier, on introduit déjà l’élément <form> qui contiendra nos champs dans la page initiale, mais cet élément ne contient initialement aucun <input>. Téléchargez la nouvelle version de listAll.jsp ici.

À chacun des liens « confirmer » et « annuler » est associé un attribut onclick qui appelle formularise avec les paramètres appropriés. Ces paramètres sont générés par la page JSP. L’intérêt d’utiliser un attribut HTML onclick est ici que cela simplifie la récupération de l’identifiant de l’ouvrage : ${ouvrage.id} dans la page JSP est remplacé par la valeur de l’identifiant avant envoi au navigateur, donc tous les attributs onclick dans la page générée sont différents.

Remarquez que l’attribut onclick est ajouté en plus de l’attribut href, de la sorte la page continue à fonctionner comme avant si le script ne marche pas, et il est également possible d’ouvrir le lien dans un nouvel onglet pour avoir accès au formulaire non-javascript.

Le but du TP est donc d’écrire la fonction formularise, dans le fichier formularise.js, à créer (attention, pas dans le dossier WEB-INF car ce fichier doit pouvoir être téléchargé par l’utilisateur).

On vous propose d’implémenter ceci en plusieurs étapes :

Fonctionnalité de base

la fonction formularise remonte au grand-père DOM du lien, qui est la ligne du tableau (le <a> est dans un <td> qui est dans le <tr> qui nous intéresse). Elle accède aux cellules individuelles via le tableau tr.cells pour modifier leur contenu. Les deux premières cellules ont juste leur style modifié si l’action est "supprimer" et doivent devenir des <input> si c’est "modifier". Dans la troisième cellule il faut ajouter les champs cachés "id" et "action" et le bouton « confirmer » soumet le formulaire. Dans un premier temps on peut ne pas proposer « annuler » ou mettre un simple lien qui recharge la page.

Deuxième fonctionnalité : annuler

La quatrième case de la ligne doit devenir un bouton qui réinitialise l’affichage. Pour cela il suffit qu’avant toute modification on récupère le innerHTML du <tr> dans une variable. Ensuite on met à ce bouton un onclick qui restaure ce contenu. Il faut bien utiliser un élément <button> en précisant le type "button" pour ne pas que ce bouton soit lié au formulaire.

Troisième fonctionnalité : empêcher d’éditer plusieurs lignes à la fois

Si on clique sur modifier/supprimer une autre ligne, on voudrait que les modifications sur celle qui était déjà en cours d’édition soient annulées. Pour cela on met un id au bouton "annuler" qu’on crée lorsqu’on génère le formulaire, et la fonction formularise commence par chercher si un élément avec cet identifiant existe et, si oui, appeler son onclick.

Pour finir : arranger la présentation

S’il vous reste du temps : ajouter des styles CSS afin que le passage du texte au formulaire ne décale pas tout l’affichage (il faut éviter que les lignes et les colonnes du tableau changent de dimension).