Prima di iniziare, è necessario completare l'Esercizio 1.4: Confronto delle differenze dei descrittori di distribuzione.
In questo esercizio verranno illustrate le differenze della codifica dei file JSP tra le due API per portlet. Esaminare le due versioni dei file JSP Edit e View. Le principali differenze vengono descritte di seguito.
I tag di IBM portlet API vengono dichiarati nella libreria di tag
portlet.tld
. I tag utilizzano il prefisso portletAPI. JSR 168 portlet API utilizza la libreria
di tag std-portlet.tld
e il prefisso portlet. È possibile utilizzare anche altre librerie di tag, come JSTL (JavaServer Pages Standard Tag Library),
definite in fmt.tld
. Come illustrato nel codice di esempio riportato di seguito, la libreria di tag JSTL utilizza il prefisso fmt.
<%@ 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" />
<%@ 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"/>
In IBM portlet API, il tag <portletAPI:init> rende gli oggetti PortletRequest, PortletResponse e PortletConfig disponibili per i file JSP. In JSR 168 portlet API, il tag <portlet:defineObjects> rende gli oggetti RenderRequest, RenderResponse e PortletConfig disponibili per i file JSP.
<portletAPI:init />
<portlet:defineObjects />
Le due API differiscono nel modo in cui impostano il tipo MIME per la risposta di rendering. I portlet IBM dichiarano il tipo MIME nella direttiva della pagina del file JSP. I portlet JSR 168 dichiarano il tipo MIME utilizzando il metodo setContentType() dell'oggetto RenderResponse nei metodi di rendering (doView(), doEdit()).
<%@ page contentType="text/html"
import="java.util.*,
com.ibm.etools.portal.portletexamples.bookmark.legacy.*,
org.apache.jetspeed.portlet.*"
session="false"%>
response.setContentType("text/html");
I riferimenti a un portlet, a una pagina oppure alle risorse di un portlet devono essere codificati in un URI del portlet (JSR 168 utilizza il termine URL). IBM portlet API utilizza createURI per puntare al portlet che esegue la chiamata nella modalità corrente e createReturnURI per puntare al portlet che esegue la chiamata nella modalità precedente. JSR 168 portlet API crea URL per la fase azione (actionURL) e la fase di rendering (renderURL).
in a JSP file: <portletAPI:createURI/>
<portletAPI:createReturnURI/>
in una classe Java: PortletResponse.createURI()
PortletResponse.createReturnURI()
in a JSP file: <portlet:actionURL/>
<portlet:renderURL/>
in a Java class: RenderResponse.createActionURL()
RenderResponse.createRenderURL()
I file JSP dei portlet devono codificare URL che fanno riferimento alle risorse nel file WAR associato, come le immagini, gli applet e altri file JSP. JSR 168 portlet API richiede che anche nell'URL venga incluso il percorso di contesto.
<%= response.encodeURL("images/photo01.jpg") %>
<%= renderResponse.encodeURL(renderRequest.getContextPath() + "/images/photo01.jpg") %>
La codifica dello spazio nomi, sia per le classi Java che per i file JSP, viene descritta nella sezione Codifica dello spazio nomi nell'Esercizio 1.3.
Il codice di esempio per entrambe le API mostra l'uso dei tag JSTL <fmt:setBundle>.
Questo tag si riferisce a un insieme di risorse Java standard, Text.properties
,
nella directory JavaSource/nls
degli esempi. Confrontare questo insieme con gli
insiemi che definiscono il portlet.
<fmt:setBundle basename="nls.Text" />
<fmt:setBundle basename="nls.Text" />
A questo punto, è possibile iniziare l'Esercizio 1.6: Scelta dell'API da utilizzare.