miércoles, 17 de julio de 2019

Liferay 7.2. Atendiendo peticiones en un Portlet

  No hay comentarios.
Continuamos con las peticiones de un Portlet. En el anterior post vimos como navegar entre páginas. Esto es análogo a las peticiones GET de HTTP. Lo que ahora veremos es cómo atender peticiones tipo POST que generalmente están asociadas a las peticiones de un formulario.




Similar al MVCRenderCommand del anterior post, aquí debemos crear una clase que implemente a com.liferay.portal.kernel.portlet.bridges.mvc.MVCActionCommand. Esta clase sería algo como esta:

package com.apuntesdejava.virtualclassroom.course.portlet;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;

import org.osgi.service.component.annotations.Component;

import com.apuntesdejava.virtualclassroom.course.constants.CoursePortletKeys;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCActionCommand;
import com.liferay.portal.kernel.util.ParamUtil;
@Component(
  immediate = true,
  property = {
    
   "javax.portlet.name=" + CoursePortletKeys.COURSE,  //el portlet al que pertenece
   "mvc.command.name=/course/update" //el nombre de esta action
  },
  service = MVCActionCommand.class
 )
public class CourseUpdateMVCActionCommand implements MVCActionCommand {

 @Override
 public boolean processAction(ActionRequest actionRequest, ActionResponse actionResponse) throws PortletException {
  String courseName = ParamUtil.getString(actionRequest, "name"); //recibimos un parámetro...
  _log.info("nombre del curso:"+courseName);    //... y lo mostramos
  return true; //devolvemos true para indicar que fue satisfactorio
 }
 
 private static final Log _log=LogFactoryUtil.getLog(CourseUpdateMVCActionCommand.class);

}


Luego, en nuestro edit.jsp debemos crear el URL, usando <liferay-portlet:actionURL> que está asociado al action que acabamos de crear. El nombre del action irá en el atributo name, así:
<liferay-portlet:actionURL var="updateURL" name="/course/update">
</liferay-portlet:actionURL>

Ahora, crearemos nuestro formulario usando los tags de Liferay:
<aui:form action="<%= updateURL %>">
 <aui:input name="name" label="course.name" type="text" ></aui:input>
 
 <aui:button-row>
  <aui:button type="submit" value="save"></aui:button>
  <aui:button type="cancel" value="cancel" href="<%= backURL %>"></aui:button>
 </aui:button-row>
</aui:form>


Todo el JSP lucirá así:
<%@ include file="init.jsp" %>
<liferay-ui:header title="course.edit" backURL="<%= backURL %>"></liferay-ui:header>  

<liferay-portlet:actionURL var="updateURL" name="/course/update">
 <liferay-portlet:param name="backURL" value="<%= currentURL %>"/>
</liferay-portlet:actionURL>

<aui:form action="<%= updateURL %>">
 <aui:input name="name" label="course.name" type="text" ></aui:input>
 
 <aui:button-row>
  <aui:button type="submit" value="save"></aui:button>
  <aui:button type="cancel" value="cancel" href="<%= backURL %>"></aui:button>
 </aui:button-row>
</aui:form>

Y listo, todo queda igual.

En el vídeo podrás apreciar cómo funciona todo junto.

Si te gustó el vídeo, dale like; si te es útil, compártelo... es gratis.

Y si tienes algún comentario, pregunta, queja, denuncia, no dejes de hacerlas en la caja de comentarios de aquí o el del vídeo, y así estaremos más en contacto.

¡Bendiciones!

No hay comentarios. :