Clique aqui para ler essa revista em PDF.
Portlets na Prática
Parte 2: Personalização, Sessões e Segurança
Nesta continuação da série sobre Portlets, aprenda a usar técnicas mais avançadas, e torna seus portlets mais seguros, interativos e personalizáveis
No primeiro artigo desta série, foi apresentada uma introdução sobre a especificação de Portlets (JSR-168) e o ciclo de vida básico de um portlet. Neste artigo serão mostrados conceitos avançados, como personalização, configurações de segurança e o uso de sessões.
porem com layouts e cores completamente
diferentes.
Personalização
Um dos grandes diferenciais dos portais é a sua capacidade de personalização pelos usuários, que é feita em dois níveis básicos.
O primeiro nível se refere a peronalizações do portal como um todo; por exemplo, a definição do número de páginas e dos portlets que devem estar em cada página, esquemas de cores, estilo das páginas e outras opções gerais.
O segundo nível é interno a cada portlet. São personalizações definidas pelo desenvolvedor e geralmente acessíveis no modo de edição do portlet, controladas pelo portlet de forma independente do portal onde está sendo executado.
Para ilustrar a diferença entre esses niveis, considere a Figura 1, que ilustra a aparência do portal para dois usuários diferentes ambos estão visualizando os dois prtlets de exemplo deste artigo, porém com layouts e cores completamente diferentes.
Isso nos leva a uma prática importante: devemos disponibilizar personalizações apenas de conteúdo ou de comportamento do portlet, e evitar a criação de personalizações que fazem mais sentido para o portal como um todo. Por exemplo, para o portlet de lista de CDs mostrado, o usuário pode escolher as colunas de informação que quer visualizar, e também se um clique no título das colunas deve mudar a ordenação – ambas são personalizações do portlet.
Figura 1. O portal na visão do usuário padrão do uPOrtal, “demo” (à esq.) e “student”
Entretanto, note que são usadas cores diferentes para linhas pares e impares na listagem. Essas cores são uma definição geral do portal: quando o usuário mudar o esquema de cores, a aparência dos portlets irá refletir a alteração automaticamente; isso não aconteceria, é claro, se as cores fossem definidas internamente nos portlets.
A forma como é feito o gerenciamento de preferências no nível de portal é específica a cada produto. Já a definição e a manipulação de preferências em nível de portlets seguem um procedimento padrão definido pela especificação, o que garante a interoperabilidade entre portais. Os seguintes passos demonstram esse processo:
1. Definir as preferências no arquivo portlet.xml
O conjunto de preferências de um portlet é definido no arquivo portlet.xml (Listagem 1),
através da tag
Para o portlet de lista de CDs, são definidas as preferências Título, Artista, Preco e Ordenavel, que indicam quais colunas devem estar visíveis e se a tabela é ordenável ou não.
Listagem 1. portlet.xml: arquivo de configuração completo para os dois portlets
<?xml version-“
<portlet-app id-“loja” version-“1.0”>
<portlet id-“ListaProdutosPortlet”>
<portlet-name>ListaProdutosPortlet</portlet-name>
<portlet-class>jm.portlet.ListaProdutosPortlet</portlet-class>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
<portlet-mode>EDIT</portlet-mode>
<portlet-mode>HELP</portlet-mode>
</supports>
<resource-bundle>jm.portlet.ListPortletResources</resource-bundle>
<portlet-preferences>
<preference>
<name>Titulo</name>
<value>true</value>
</preference>
<preference>
<name>Artista</name>
<value>true</value>
</preference>
<preference>
<name>Preco</name>
<value>true</value>
</ preference>
<preference>
<name>Ordenavel</name>
<value>true</value>
</preference>
<preferences-validator>
jm.portlet.ListaPreferencesValidator</preferences-validator>
</portlet-preferences>
</portlet>
<portlet id-“CarrinhoPortlet”>
<portlet-name>CarrinhoPortlet</portlet-name>
<display-name>Carrinho de Compras</display-name>
<description>Carrinho de Compras</description>
<portlet-class>jm.portlet.CarrinhoPortlet</portlet-cla5S>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
</supports>
<resource-bundle>jm.portlet.CarrinhoPortletResources</resource-bundle>
<security-role-ref>
<role-name>customer</role-name>
<role-link>user</role-link>
</security-role-ref>
</portlet>
<user-attribute>
<name>user.home-info.online.email</name>
</user-attribute>"
[...] continue lendo...