Exercice 1.5 : Comparaison des modes de codage de fichier JSP

Avant de commencer, vous devez terminer l'Exercice 1.4 : Comparaison des descripteurs de déploiement.

Dans cet exercice, vous allez découvrir les différences de codage de fichier JSP en utilisant l'une ou l'autre API de portlet. Comparez les deux versions des fichiers JSP d'édition et d'affichage. Les principales différences sont exposées ci-après.

Bibliothèques de balises

Les balises de l'API de portlet IBM sont déclarées dans la bibliothèque de balises portlet.tld. Les balises utilisent le préfixe portletAPI. L'API de portlet JSR 168 emploie la bibliothèque de balises std-portlet.tld et le préfixe portlet. Il est également possible d'utiliser d'autres bibliothèques de balises, telle que la bibliothèque JSTL (JavaServer Pages Standard Tag Library), définie dans fmt.tld. Comme illustré dans l'exemple de code ci-après, la bibliothèque de balises JSTL utilise le préfixe fmt.

API de portlet IBM
<%@ taglib uri="/WEB-INF/tld/portlet.tld" prefix="portletAPI" %>
<portletAPI:init />

<%@ taglib prefix="fmt" uri="/WEB-INF/tld/fmt.tld" %>
<fmt:setBundle basename="nls.Text" />

API de portlet JSR 168
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
<portlet:defineObjects />

<%@ taglib prefix="fmt" uri="/WEB-INF/tld/fmt.tld" %>
<fmt:setBundle basename="nls.Text"/>

Mise à disposition d'objets pour les fichiers JSP

Dans l'API de portlet IBM, la balise <portletAPI:init> met les objets PortletRequest, PortletResponse et PortletConfig à disposition des fichiers JSP. Dans l'API de portlet JSR 168, la balise <portlet:defineObjects> met les objets RenderRequest, RenderResponse et PortletConfig à disposition des fichiers JSP.

API de portlet IBM
<portletAPI:init />
API de portlet JSR 168
<portlet:defineObjects />

Déclarations de types MIME

Les deux API ne définissent pas le type MIME de la réponse de l'affichage de la même manière. Les portlets IBM déclarent le type MIME dans l'instruction de page du fichier JSP. Les portlets JSR 168 déclarent le type MIME à l'aide de la méthode setContentType() de l'objet RenderResponse dans les méthodes d'affichage (doView(), doEdit()).

API de portlet IBM
<%@ page contentType="text/html"
         import="java.util.*,
                 com.ibm.etools.portal.portletexamples.bookmark.legacy.*,
                 org.apache.jetspeed.portlet.*"
         session="false"%>
API de portlet JSR 168
response.setContentType("text/html");

Références à un portlet

Les références à un portlet, une page de portlet ou une ressource de portlet doivent être codées dans un identificateur URI de URI (dans le cas de l'API de portlet JSR 168, le terme URL est employé). L'API de portlet IBM utilise createURI pour désigner le portlet appelant dans le mode en cours, et createReturnURI pour désigner le portlet appelant dans le mode précédent. L'API de portlet JSR 168 crée les URL de la phase liées aux actions (actionURL) et de la phase d'affichage (renderURL).

API de portlet IBM
dans un fichier JSP :   <portletAPI:createURI/>
                 <portletAPI:createReturnURI/>
dans une classe Java : PortletResponse.createURI()
                 PortletResponse.createReturnURI()
API de portlet JSR 168
dans un fichier JSP :   <portlet:actionURL/>
                 <portlet:renderURL/>
dans une classe Java : RenderResponse.createActionURL()
                 RenderResponse.createRenderURL()

Codage d'URL

Les fichiers JSP de portlet doivent coder les URL qui se réfèrent aux ressources du fichier WAR associé, comme les images, les applets et d'autres fichiers JSP. L'API de portlet JSR 168 requiert également que le chemin du contexte figure dans l'URL.

API de portlet IBM
<%= response.encodeURL("images/photo01.jpg") %>
API de portlet JSR 168
<%= renderResponse.encodeURL(renderRequest.getContextPath() + "/images/photo01.jpg") %>

Codage de l'espace de nom

Le codage de l'espace de nom pour les classes Java et les fichiers JSP des deux API est exposé dans la section Codage de l'espace de nom de l'exercice 1.3.

Regroupements de ressources

L'exemple de code des deux API illustre l'utilisation de la balise JSTL <fmt:setBundle>. Cette balise fait référence à un regroupement de ressources Java standard, Text.properties, qui figure dans le répertoire JavaSource/nls des exemples. Procédez à une comparaison avec les regroupements de ressources définissant le portlet.

API de portlet IBM
<fmt:setBundle basename="nls.Text" />
API de portlet JSR 168
<fmt:setBundle basename="nls.Text" />

A présent, vous êtes prêt à commencer l'Exercice 1.6 : Choix de l'API à utiliser.

Conditions d'utilisation | Commentaires
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.