Exercício 1.3: Comparando Diferenças da Classe Java

Antes de começar, você deve concluir o Exercício 1.2: Diferenças Conceituais entre as APIs.

Neste exercício, você aprenderá as diferenças na codificação da classe Java entre as duas APIs de portlet. Examine as duas versões da classe Java BookmarkPortlet. Observe estas diferenças básicas entre as duas APIs:

Importando Classes Básicas do Portlet

As classes de portlet importadas pelas duas APIs são diferentes.

API do portlet IBM
import org.apache.jetspeed.portlet.*;
API do portlet JSR 168
import javax.portlet.*;

herança da classe Java

As duas APIs herdam de classes diferentes. A API de portlet IBM estende o org.apache.jetspeed.portlet.PortletAdapter, que fornece uma implementação padrão da interface org.apache.jetspeed.portlet.Portlet. Essa classe de Portlet estende o HttpServlet, portanto, os portlets IBM são um tipo de servlet. A API de portlet JSR 168 fornece uma classe javax.portlet.GenericPortlet que implementa a interface javax.portlet.Portlet.

API do portlet IBM
public class BookmarkPortlet extends PortletAdapter implements ActionListener
API do portlet JSR 168
public class BookmarkPortlet extends GenericPortlet

Objetos de Pedido e Resposta

Os nomes dos objetos de pedido e resposta nos métodos de processamento (JSR 168 API) ou serviço (IBM API), como doView() e doEdit(), são diferentes. A API de portlet IBM utiliza os objetos PortletRequest e PortletResponse; a API JSR 168 utiliza os objetos RenderRequest e RenderResponse. O RenderRequest e o RenderResponse estendem os objetos PortletRequest e PortletResponse, respectivamente, fornecendo funcionalidade comum.

API de portlet IBM
public void doEdit(PortletRequest request, PortletResponse response)
API de portlet JSR 168
public void doEdit(RenderRequest request, RenderResponse response)

Incluindo Arquivos JSP

A API de portlet IBM utiliza o objeto PortletContext para incluir arquivos JSP; a API de portlet JSR 168 utiliza o objeto PortletRequestDispatcher. A ação incluir chama o arquivo JSP especificado.

API de portlet IBM
getPortletConfig().getContext().include(EDIT_JSP, request, response);
API de portlet JSR 168
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName);
rd.include(request, response);

Dados do Portlet

A API de portlet IBM armazena dados do usuário em um objeto PortletData. A API de portlet JSR 168 armazena informações semelhantes em um objeto PortletPreferences.

API do portlet IBM
PortletData prefs = portletRequest.getData()
API do portlet JSR 168
PortletPreferences prefs = renderRequest.getPreferences()

Processamento da Ação

Na API de portlet IBM, a classe Java deve implementar a interface ActionListener fornecendo um método actionPerformed(). Utilizando a API de portlet JSR 168, a classe Java deve fornecer um método processAction(); nenhum listener é necessário.

API de portlet IBM
public void actionPerformed(ActionEvent event) throws PortletException
API de portlet JSR 168
public void processAction(ActionRequest request, ActionResponse response)

Codificação de Espaço de Nomes

A codificação de espaço de nomes é utilizada para assegurar que as variáveis utilizadas em um portlet sejam exclusivas no contêiner do portal. Os trechos a seguir também mostram os métodos de codificação de espaço de nomes para uso em um arquivo JSP.

API de portlet IBM
em uma classe Java: PortletResponse.encodeNamespace()
em um arquivo JSP:   <portletAPI:encodeNamespace/>
API de portlet JSR 168
em uma classe Java: RenderResponse.getNamespace()
em um arquivo JSP:   <portlet:namespace/>

Agora você está pronto para começar o Exercício 1.4: Comparando Diferenças do Descritor de Implementação.

Termos de Utilização | Feedback
(C) Copyright IBM Corporation 2000, 2005. Todos os Direitos Reservados.