Tag Archives: IBM WebSphere Portal

Bysutradi

Personalization aplicado à apresentação de menus no Portal

As vezes nos deparamos com solicitações que nos fazem implementar soluções complementares para chegar ao resultado esperado.
Não diferente disso, precisei fazer com que o menu principal criado no WebSphere Portal tivesse o seguinte comportamento: quando o usuário não tiver permissão de acesso a uma página, o menu deve ser apresentado em cinza sem ação de mouse (e não direcionar para a página de destino). Quando o usuário tiver permissão, deve apresentar a página com os portlets. Resumindo: alguns usuários visualizarão a página “Exemplo” que conterá portlets e outros visualização um rótulo “Exemplo”, em cinza, que não possui link.
Porém, este é um comportamento diferente do padrão do produto: quando você não tem acesso a algo, este algo não é carregado/exibido.

Qual a solução encontrada?

A solução que encontramos foi usar o recurso de Personalization (que sobrepões as regras de acesso por usuários/grupos), criando regras opostas aplicadas nas duas páginas com o mesmo nome. Na página “Exemplo” (que contém os portlets) foram aplicadas as regras de permissão normal (com os grupos de acesso normais). Na página “Exemplo” (com mesmo nome, mas sem acesso aos portlets), aplicamos uma regra de personalização oposta à regra aplicada na página “Exemplo” (que contém os portlets) e adicionamos um parâmetro para que o tema possa saber que deve ser criado na cor cinza. A tratativa de exibição em cinza foi feita no tema.

Bysutradi

Usando Cookies em Portlets com JSF 2 no IBM WebSphere Portal 8

Para se usar Cookies em portlets (JSR 286), de acordo com a especificação, bastaria apenas adicionar o XML abaixo no arquivo portlet.xml e implementar o método doHeaders no Portlet.

<container-runtime-option>
	<name>javax.portlet.renderHeaders</name>
	<value>true</value>
</container-runtime-option>

Porém, se você requer usar Cookies em portlets (JSR 286) com JSF 2 no IBM WebSphere Portal, encontrará o problema abaixo:

[14/02/14 12:03:12:180 BRST] 0000006d servlet       E com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0068E: An exception was thrown by one of the service methods of the servlet [PortletMensagem] in application [PA_PortletMensagem]. Exception created : [java.lang.NullPointerException
	at com.ibm.faces20.portlet.FacesPortlet.init(FacesPortlet.java:131)
	at com.empresa.mensagem.PortletMensagemPortlet.init(PortletMensagemPortlet.java:38)
	at javax.portlet.GenericPortlet.init(GenericPortlet.java:107)

Diante deste cenário, pensamos em soluções alternativas definitivas (também chamada de POG) para conseguir chegar no resultado esperado.

Paralelamente ao andamento da implementação que a equipe estava fazendo, INCONFORMADO, resolvi procurar a tal classe que apresentava o erro e verificar (decompilar) o que ela estava fazendo.

Após verificar o que a classe estava fazendo, consegui entender o problema e encontrar a solução.

Juntamente com a opção “renderHeaders”, também necessitaríamos adicionar a opção “actionScopedRequestAttributes”. Veja como ficou nosso portlet.xml agora.

<container-runtime-option>
	<name>javax.portlet.renderHeaders</name>
	<value>true</value>
</container-runtime-option>
<container-runtime-option>
	<name>javax.portlet.actionScopedRequestAttributes</name>
	<value>true</value>
</container-runtime-option>

Após a adição destes dois itens, o portlet passou a entrar normalmente no doHeaders e conseguimos manipular os Cookies.