Con la nueva versión de Liferay y su migración a OSGI(Un gran invento, no me cansaré de decirlo) han cambiado muchas cosas, una de estas cosas es como añadimos a un portlet, que nosotros hemos desarrollado, las opciones de configuración:
Para hacer esto, ahora lo haremos creando una classe que extienda de ‘DefaultConfigurationAction’ y anotada como componente, fijaros especialmente en la anotación ‘configurationPid’ y la propiedad ‘javax.portlet.name’:
@Component( configurationPid = "com.lostsys.xxx.forms.config.FormsConfig", configurationPolicy = ConfigurationPolicy.OPTIONAL, immediate = true, property = { "javax.portlet.name=com_lostsys_xxxx_forms_portlet_FormService" }, service = ConfigurationAction.class ) public class ConfigurationForm extends DefaultConfigurationAction { @Override public String getJspPath(HttpServletRequest renderRequest) { PortletRequest pr=(PortletRequest) renderRequest.getAttribute("javax.portlet.request"); PortletPreferences prefs=pr.getPreferences(); renderRequest.setAttribute( "key", prefs.getValue("key", "") ); return "/config.jsp"; } @Override public void processAction(PortletConfig portletConfig, ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { String key=ParamUtil.getString(actionRequest, "key", ""); PortletPreferences prefs=actionRequest.getPreferences(); prefs.setValue("key", key); prefs.store(); } }
En esta classe de configuración vemos como procesamos la grabación de un parámetro llamado ‘key’ y sobrescribimos el método ‘getJspPath’ para pintar el JSP que nosotros requerimos. Si estáis habituados a trabajar con portlets es fácil de entender.
Ahora toca configurar a nuestro portlet que debe utilizar es esta classe para gestionar la configuración:
@Component( configurationPid = "com.lostsys.xxx.forms.config.FormsConfig", immediate = true, property = { "com.liferay.portlet.display-category=XXX", "com.liferay.portlet.instanceable=true", "javax.portlet.display-name=forms-service Portlet", "javax.portlet.init-param.template-path=/", "javax.portlet.init-param.view-template=/view.jsp", "javax.portlet.resource-bundle=content.Language", "javax.portlet.security-role-ref=power-user,user", "javax.portlet.name=com_lostsys_xxx_forms_portlet_FormService" }, service = Portlet.class ) public class FormService extends MVCPortlet {
Como he comentado antes aquí lo importante es la anotación ‘configurationPid’ y la propiedad ‘javax.portlet.name’. Que deben coincidir para que todo funcione.