Antes de começar, você deve concluir Exercício 1.4: Comparando Diferenças do Descritor de Implementação.
Neste exercício, você aprenderá as diferenças na codificação do arquivo JSP entre as duas APIs de portlet. Examine as duas versões dos arquivos JSP de Edição e Visualização. As diferenças básicas são descritas a seguir.
As tags da API de portlet IBM são declaradas na
biblioteca de tags
portlet.tld
. As tags utilizam o prefixo portletAPI. A API de portlet JSR 168 utiliza a biblioteca de tags
std-portlet.tld
e o prefixo portlet. Outras bibliotecas de tags, como a JSTL (JavaServer Pages Standard Tag Library), definidas no
fmt.tld
, também podem ser utilizadas. Conforme mostrado no código de amostra a seguir, a biblioteca de tags JSTL utiliza o prefixo 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"/>
Na API de portlet IBM, a tag <portletAPI:init> torna os objetos PortletRequest, PortletResponse e PortletConfig disponíveis para os arquivos JSP. Na API de portlet JSR 168, a tag <portlet:defineObjects> torna os objetos RenderRequest, RenderResponse e PortletConfig disponíveis para os arquivos JSP.
<portletAPI:init />
<portlet:defineObjects />
As duas APIs diferem em como elas definem o tipo MIME para a resposta de processamento. Os portlets IBM declaram o tipo MIME na diretiva da página do arquivo JSP. Os portlets JSR 168 declaram o tipo MIME utilizando o método setContentType() do objeto RenderResponse nos métodos de processamento (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");
Referências a um portlet, a página do portlet ou recurso do portlet devem ser codificadas em um URI de portlet (o JSR 168 utiliza o termo URL). A API de portlet IBM utiliza o createURI para apontar para o portlet de chamada no modo atual e createReturnURI para apontar para o portlet de chamada no modo anterior. A API de portlet JSR 168 cria URLs para a fase de ação (actionURL) e a fase de processamento (renderURL).
em um arquivo JSP: <portletAPI:createURI/>
<portletAPI:createReturnURI/>
em uma classe Java: PortletResponse.createURI()
PortletResponse.createReturnURI()
em um arquivo JSP: <portlet:actionURL/>
<portlet:renderURL/>
em uma classe Java: RenderResponse.createActionURL()
RenderResponse.createRenderURL()
Os arquivos JSP de portlet devem codificar URLs que se referem a recursos no arquivo WAR associado, como imagens, applets e outros arquivos JSP. A API de portlet JSR 168 também requer que o caminho de contexto seja incluído no URL.
<%= response.encodeURL("images/photo01.jpg") %>
<%= renderResponse.encodeURL(renderRequest.getContextPath() + "/images/photo01.jpg") %>
A codificação de espaço de nomes, para classes Java e arquivos JSP, é descrita Codificação de Espaços de Nomes no exercício 1.3.
O código de exemplo para ambas as APIs mostra a utilização da tag JSTL <fmt:setBundle>.
Essa tag refere-se a um pacote de recursos Java padrão, Text.properties
,
no diretório JavaSource/nls
das amostras. Compare isso com Pacotes de
Recursos que Definem o Portlet.
<fmt:setBundle basename="nls.Text" />
<fmt:setBundle basename="nls.Text" />
Agora você está pronto para começar o Exercício 1.6: Decidindo qual API Utilizar.