A Mindtek tem como uma de suas muitas expertises tecnológicas o desenvolvimento de portais usando Liferay.  Vamos à partir de agora, compartilhar alguns conhecimentos garimpados nos últimos projetos, e fazer uma série de artigos com dicas sobre o desenvolvimento e personalização do CMS Liferay.

Este primeiro será sobre uma questão muito pertinente.  Muitas vezes precisamos usar certos parâmetros da fase action e passar para o render request. Precisamos renderizar uma determinada página de acordo com parâmetros na action. Como fazer isso?

Por exemplo: Se precisarmos redirecionar para páginas diferentes, de acordo com o nome do método de action chamado, podemos fazer o seguinte:

É necessário sobrescrever o método getPath que tem como parâmetro um PortletRequest. Lembrando que o PortletRequest é extendido tanto pelo ActionRequest quanto pelo RenderRequest.
Se esse método não retornar ‘null’, o request passa direto pelo doView, e renderiza a página do initParameter setado no método getPath. Se ele retornar ‘null’ será renderizada a pagina do initParameter do método doView.
Exemplo de como ficaria a classe Portlet :

public class TestPortlet extends MVCPortlet {
public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException
{
include(getInitParameter(“initial_view_pagina”), renderRequest, renderResponse);
}
public void viewItem(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException
{
}
public void insertItem (ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException
{
}
@Override
protected String getPath(PortletRequest portletRequest)
{
String caminho = null;
//Aqui resgata-se no request a action chamada
String action = ParamUtil.getString(
PortalUtil.getHttpServletRequest(portletRequest),ActionRequest.ACTION_NAME);
if(action.equals("viewItem"))
{
caminho = getInitParameter(“ver_item_pagina”);
}
else if(action.equals("insertItem")
{
caminho = getInitParameter(“isere_item_pagina”);
}
return caminho;
}
}

Como se sabe, deve-se setar os ‘initParameter’s das JSPs no arquivo portlet.xml

<init-param>
<name>initial_view_pagina </name>
<value>/html/view.jsp</value>
</init-param>
<init-param>
<name>viewItem</name>
<value>/html/view-item.jsp</value>
</init-param>
<init-param>
<name>insertItem</name>
<value>/html/insert-item.jsp</value>
</init-param>

Mas agora é a chave: para que o getPath funcione, é indispensável que seja setado o seguinte em portlet.xml:

<init-param>
<name>copy-request-parameters</name>
</value>true</value>
</init-param>

Somente assim, no método getPath, será possível buscar no getHttpServletRequest a actionName buscada.
Esperamos que tenha sido útil este post.

Sugestões de assuntos, críticas e dúvidas são bem vindas.