Traitement et visibilité des paramètres de requête dans les portlets
Découvrez comment les portlets HCL et les portlets standard définissent les paramètres des requêtes ciblées vers des portlets. Obtenez des informations sur la visibilité des paramètres pour les portlets standard, les portlets HCL et les servlets ou pages JSP inclus.
Les portlets HCL et les portlets standard ont différentes façons de définir les paramètres des requêtes ciblées vers des portlets. Cette rubrique est mieux comprise si vous avez des notions sur le passage des paramètres dans l'utilisation de ces API pour la programmation de portlet.
- Si les portlets génèrent des URL en utilisant l'API de portlet, ils peuvent définir les paramètres de façon programmée par des appels PortletURL.setParameter (standard) ou PortletURI.addParameter (HCL).
- Quand les pages HTML sont soumises au portail, les valeurs des formulaires sont passées comme paramètres de requête. Si vous utilisez la méthode GET pour la soumission de formulaire dans les portlets HCL, d'autres paramètres qui ont été définis de façon programmée sur l'URL d'action du formulaire risquent de ne pas être retournés par le client. Pour JSR 168 et 286 HTTP GET, les paramètres sont transmis en tant que paramètres de rendu.
- Les portlets peuvent déclencher des opérations sur d'autres portlets en utilisant les API du courtier de propriétés. Dans ce cas, le portlet cible peut recevoir des paramètres qui propagent les valeurs provenant du portlet source.
- Les JSP de thème et d'habillage du portail peuvent créer des URL vers des portlets à l'aide de la balise
<portal-navigation:urlGeneration/>. Ces URL de portlet peuvent également inclure des paramètres visibles par tous les portlets HCL (mais pas aux portlets standard).
De multiples portlets sont normalement appelés au cours du traitement d'une seule requête client, et ces diverses méthodes de définition des paramètres peuvent interagir de différentes façons. Par conséquent, il vous faut considérer quels paramètres sont effectivement visibles par un portlet, spécialement si des portlets standard et HCL sont placés sur la même page et appelés par une requête client unique.
Visibilité des paramètres pour les portlets standard
Les portlets standard n'utilisent pas la désignation dans un espace de nom. La désignation dans l'espace de nom n'est pas requise dans un environnement constitué uniquement de portlets standard car ces portlets reçoivent les paramètres de la requête client seulement s'ils sont directement ciblés par une URL, les portlets auxquels ces paramètres appartiennent sont donc implicitement clairs.
Les portlets standard constituent la cible d'une URL si l'URL a été créée avec la méthode RenderResponse.createRenderURL() ou RenderResponse.createActionURL(). Dans ce cas, le portlet recevra les paramètres définis de façon programmée sur l'URL. En cas d'action URL, le portlet peut lire les paramètres de requête ou de formulaire pour la requête, et peut donc lire la saisie du formulaire si l'URL était l'action d'une page HTML. Comme fixé par la spécification de portlet Java™, les portlets ne doivent pas utiliser des URL d'affichage pour les actions de page HTML parce que les paramètres de la page risquent de ne pas être visibles dans ce cas.
Pour les portlets qui ne sont pas cibles d'une URL, la spécification de portlet Java™ définit la notion de paramètres d'affichage. Dans tout appel d'affichage qui n'est pas déclenché par une URL d'affichage visant le portlet (c'est-à-dire, quand le portlet est simplement affiché comme partie d'une page où l'utilisateur interagit avec un autre portlet), le portlet ne voit que son jeu actif de paramètres d'affichage, indépendamment des paramètres qui sont définis sur requête du client. Le portlet ne peut pas voir les paramètres de demande définis par la balise <portal-navigation:urlGeneration/> sauf si celle-ci spécifie explicitement un portlet cible en utilisant l'attribut layoutNode.
Les nouveaux paramètres d'affichage sont définis soit par une URL d'affichage, soit par une action de portlet, et le portail continuera à fournir ces paramètres au portlet tant que ce dernier n'est pas la cible explicite d'une URL ou d'un événement du courtier de propriétés. Cela signifie que les paramètres d'affichage peuvent (et doivent) être utilisés pour stocker l'état de navigation du portlet.
Finalement, une action de portlet standard peut être appelée via le courtier de propriétés si les valeurs de propriétés sont propagées à partir d'un autre portlet. Dans ce cas, le portlet verra son jeu actuel de paramètres d'affichage et sera donc capable de conserver (des parties de) son état en cours à travers l'appel d'action. De plus, ces paramètres définis par le mécanisme de passage des propriétés du courtier seront visibles, et remplaceront les valeurs des paramètres d'affichage portant le même nom. Là encore, les paramètres visibles sont indépendants des paramètres définis sur la requête client.
Notez que les paramètres d'affichage sont passés uniquement à l'action du portlet, si celle-ci est appelée par le courtier de propriétés. Les actions qui sont appelées par une URL ne les verront pas automatiquement. Vous pouvez cependant passer tous les paramètres d'affichage en les définissant explicitement sur l'URL :
PortletURL url = renderResponse.createActionURL;
url.setParameters(renderRequest.getParameterMap());
Visibilité des paramètres pour les portlets HCL Digital Experience
Les portlets HCL utilisent normalement l'espace de nommage de paramètre, ce qui signifie que le nom d'un paramètre identifie clairement le portlet auquel il appartient. Les paramètres désignés dans l'espace de nom ne sont visibles que par le portlet auquel ils appartiennent. De plus, les portlets HCL peuvent également avoir accès à des paramètres supplémentaires, non désignés dans l'espace de nom, qui ont été définis par la requête.
- Si vous utilisez la méthode PortletURI.addParameter() pour définir des paramètres, la désignation dans l'espace de nom s'effectue automatiquement.
- Lorsque le portlet génère une page HTML, le programmeur doit explicitement désigner dans un espace de nom les zones d'entrée, y compris les paramètres, en utilisant la balise <portletAPI:encodeNamespace/>. Cependant, même si des portlets HCL utilisent des formulaires sans désignation dans un espace de nom, ils recevront tout de même les paramètres du formulaire.
- Un portlet est assuré de pouvoir lire les paramètres de demande définis par la balise
<portal-navigation:urlGeneration/>.
A cause de ces garanties, le portail n'est pas toujours capable de filtrer les paramètres qui ne lui sont pas destinés mais restent néanmoins visibles. Par conséquent, un portlet HCL doit être préparé à gérer le fait qu'une requête PortletRequest puisse contenir des paramètres supplémentaires (non désignés dans un espace de nom). En cas de conflit entre des noms de paramètres, un paramètre désigné dans un espace de nom l'emporte sur celui désigné sans espace de nom, et ce dernier n'est pas visible.
Les mêmes considérations s'appliquent à toutes les méthodes de portlet HCL qui capturent une requête PortletRequest ou un événement par lequel une PortletRequest peut être retrouvée, qu'elles soient déclenchées directement par une URL ou indirectement via le courtier de propriétés.
Visibilité des paramètres dans les JSP ou servlets inclus
Lorsque des portlets incluent des servlets ou des JSP, les ressources incluses verront les mêmes paramètres que le portlet les incluant. La spécification du servlet autorise le portlet à ajouter une chaîne de requête au chemin d'inclusion, comme dans l'exemple suivant.
context.getRequestDispatcher("/jsps/View.jsp?mode=detailed");
Les paramètres qui sont définis de cette façon seront toujours visibles dans la page JSP ou le servlet inclus, aussi bien pour les portlets HCL que pour les portlets standard. La valeur aura priorité sur l'ancienne valeur du paramètre de même nom spécifié par un autre mécanisme. Cela signifie que l'appel getParameter() retournera la nouvelle valeur et l'appel getParameterValues(), la nouvelle valeur ainsi que toute ancienne valeur.
Si le portlet rendu est un portlet HCL, les paramètres désignés dans un espace de nom remplacent ceux sans espace de nom.