Creación de un portlet de por vida: ¿cómo pasar los datos a view.jsp desde la clase Java?
liferay (3)
Estoy tratando de crear un portlet de por vida con solo un archivo JSP llamado view.jsp
. Lo que necesito es:
Cuando se carga el portlet, quiero llamar a la clase Java personalizada donde genero una matriz.
Necesito pasar esa matriz a la
view.jsp
.
¿Como hacer eso?
¿Ha creado su portlet con el script create.sh
de Liferay? En este caso, tendremos que crear una nueva clase de portlet que amplíe MVCPortlet
:
public class ArrayPortlet extends MVCPortlet {
}
Además, tendrá que cambiar el archivo WEB-INF/portlet.xml
para que apunte a su clase. Reemplace la línea de abajo por
<portlet-class>com.liferay.util.bridges.mvc.MVCPortlet</portlet-class>
nombrando uno a tu clase de portlet:
<portlet-class>br.com.seatecnologia.arrayportlet.ArrayPortlet</portlet-class>
Esto es sólo la configuración. Ahora, la parte genial: el código! Debe crear un método para manejar la vista del portlet. Este método debe llamarse doView()
y tiene dos parámetros: un RenderRequest
y un RendertResponse
. Además, lanza algunas excepciones y delega la representación del portlet al método de la superclase:
public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
super.doView(renderRequest, renderResponse);
}
Sin embargo, antes de representar el portlet, creamos nuestra matriz:
String[] array = new String[] { "foo", "bar", "baz" };
y lo puso en el RenderRequest
recibido como parámetro. Debe asignar un nombre al parámetro; en este caso, el nombre es "my-array"
:
renderRequest.setAttribute("my-array", array);
Esta es nuestra clase, completa:
public class ArrayPortlet extends MVCPortlet {
@Override
public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
String[] array = new String[] { "foo", "bar", "baz" };
renderRequest.setAttribute("my-array", array);
super.doView(renderRequest, renderResponse);
}
}
Es a través del objeto RenderRequest
que pasamos los valores a la JSP. Ahora, en el JSP, deberíamos "importar" la instancia de RenderRequest
(y otros objetos también) agregando la etiqueta <portlet:defineObjects />
al comienzo del JSP. Después de esto, podemos obtener cualquier atributo del objeto renderRequest
través de su nombre. Tenga en cuenta que el método getAttribute()
devuelve Object
por lo que debe convertir su valor de retorno al tipo correcto:
<portlet:defineObjects />
<%
String[] anArrayFromMyPortlet = (String[])renderRequest.getAttribute("my-array");
%>
Ahora, solo usa el objeto recuperado como desees:
<ul>
<% for (String string : anArrayFromMyPortlet) { %>
<li><%= string %></li>
<% } %>
</ul>
Este es el resultado de este código en mi máquina:
Puedes hacerlo de varias maneras:
1) Puede usar renderRequest.setAttribute("my-array", array);
2) Puedes poner tus datos en una sesión
request.getPortletSession().setAttribute("my-array", array);
En el segundo caso, no olvide eliminar su elemento de la sesión cuando ya no lo necesite.
Su pregunta es bastante vaga, recomiendo obtener una introducción al desarrollo de portlets, ya que parece tratarse de la comprensión básica de la infraestructura / especificación.
Intente responder a su pregunta dando algunas indicaciones: disculpas si también son demasiado vagas:
- init () es parte del ciclo de vida del portlet y se llamará una vez, cuando se cargue la clase de portlet.
- Puede pasar valores a su vista (por ejemplo) agregando atributos de solicitud a su RenderRequest en doView ()
Por supuesto, esto varía con el marco de portlet que está utilizando: los métodos mencionados anteriormente son de la especificación de portlet subyacente (es decir, JSR-286)