Popup avec JSF

Cette page a été rédigée il y a fort fort longtemps, et n'a pas tellement été mise à jour.

 

Vous savez, moi je ne crois pas qu'il y ait de bonne ou de mauvaise page. Moi, si je devais résumer mon wiki aujourd'hui avec vous, je dirais que c'est d'abord des rencontres. Des gens qui m'ont tendu la main, peut-être à un moment où je ne pouvais pas, où j'étais seul chez moi. Et c'est assez curieux de se dire que les hasards, les rencontres forgent une destinée... Parce que quand on a le goût de la chose, quand on a le goût de la chose bien faite, le beau geste, parfois on ne trouve pas l'interlocuteur en face je dirais, le miroir qui vous aide à avancer. Alors ça n'est pas mon cas, comme je disais là, puisque moi au contraire, j'ai pu ; et je dis merci au wiki, je lui dis merci, je chante le wiki, je danse le wiki... je ne suis qu'amour ! Et finalement, quand des gens me disent « Mais comment fais-tu pour avoir cette humanité ? », je leur réponds très simplement que c'est ce goût de l'amour, ce goût donc qui m'a poussé aujourd'hui à entreprendre une construction logicielle... mais demain qui sait ? Peut-être simplement à me mettre au service de la communauté, à faire le don, le don de soi.

Comment ouvrir une fenêtre de popup depuis une page JSF ?

Une application doit ouvrir une fenêtre indépendante en réaction au clic sur un command link. La fenêtre affiche des données liées aux données de la fenêtre appelante.

Solution DHTML

Plutôt que de lancer une vrai fenêtre en popup, celle-ci peut être remplacée par un composant DHTML (http://www.jenia.org).

Solution avec Javascript

Un exemple de popup par ouverture d’une fenêtre de navigateur a été testée, sans réussite (cf. http://www.jsftutorials.net/interface/jsf-popup.html).

L’exemple de popup ne fonctionne qu’avec JSF 1.0. Pour l’adapter à JSF 1.1, il faut appliquer une petite modification expliquée dans la fonction showPlaceList.

 function showPlaceList(action, form, target) {
   formId=action.form.id;
   features="height=300,width=250,status=yes,toolbar=no,menubar=no,location=no,scrollbars=yes";
   winId=window.open(,'list',features); // open an empty window

   hform=document.forms[form]; // reference to the hidden form

   // Copy the current country variable value
   // to the corresponding field of the hidden form.
   hform[form+":country"].value = getCountry(action.form);

   // Submit the hidden form.
   // The output will be sent to the just opened window.
   document.getElementById(form+':'+target).onclick();
 }

L’exemple ainsi modifié fonctionne avec JSF 1.1, et plus particulièrement avec MyFaces.

Solution simple

Cependant, certaines fonctionnalités proposées par l’exemple ne sont pas forcément utiles et une solution plus simple peut être envisagée. Il suffit en effet de préciser target="#" dans un commandLink pour qu’une navigation traditionnelle se transforme en navigation avec ouverture d’une nouvelle fenêtre. Par contre, dans ce fonctionnement, la nouvelle fenêtre s’ouvre dans un navigateur standard, avec les barres de menu, de navigation et autres ; cela impose une mise en forme (javascript) supplémentaire dans la fenêtre nouvellement ouverte.