2011-08-01 45 views
19

Estoy intentando crear portlet en liferay con solo un archivo JSP llamado view.jsp. Lo que necesito es:Creación de portlet liferay: cómo pasar datos a view.jsp desde la clase Java?

  1. Cuando se carga el portlet, quiero llamar a la clase Java personalizada donde genero una matriz.

  2. Necesito pasar esa matriz al view.jsp.

¿Cómo hacer eso?

+0

Solo aclaración, ¿te refieres a view.jsp? ¿Y necesitas el valor después de que se represente la página? Si es así, ¿por qué? –

+0

Sí, quiero decir jsp. Quiero analizar el xml remoto y poner todos los datos en una matriz, y luego pasar esta matriz a view.jsp. Simplemente no quiero escribir código en jsp. Quiero usar la clase java. –

Respuesta

38

¿Ha creado su portlet con el script create.sh de Liferay? En este caso, tendremos que crear una nueva clase de portlets que se extiende MVCPortlet:

public class ArrayPortlet extends MVCPortlet { 

} 

Además, tendrá que cambiar el archivo WEB-INF/portlet.xml para que apunte a su clase. Vuelva a colocar la línea de abajo por

<portlet-class>com.liferay.util.bridges.mvc.MVCPortlet</portlet-class> 

por uno nombramiento de su clase de portlets:

<portlet-class>br.com.seatecnologia.arrayportlet.ArrayPortlet</portlet-class> 

Esto es sólo configuración. Ahora, la parte genial: ¡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 delegar el portlet de representación para el método de la superclase:

public void doView(RenderRequest renderRequest, RenderResponse renderResponse) 
throws IOException, PortletException { 
    super.doView(renderRequest, renderResponse); 
} 

Antes de mostrar el portlet, sin embargo, nosotros creamos nuestra matriz:

String[] array = new String[] { "foo", "bar", "baz" }; 

y lo ponemos en el RenderRequest recibido como parámetro. Usted debe dar 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 RenderRequest objeto que se pasa los valores a el JSP.Ahora, en el JSP, debemos "importar" la instancia 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 a través de su nombre. Tenga en cuenta que el método getAttribute() devuelve Object por lo que debe emitir su valor de retorno al tipo correcto:

<portlet:defineObjects /> 
<% 
String[] anArrayFromMyPortlet = (String[])renderRequest.getAttribute("my-array"); 
%> 

Ahora, usted sólo tiene que utilizar el objeto recuperado como desee:

<ul> 
<% for (String string : anArrayFromMyPortlet) { %> 
<li><%= string %></li> 
<% } %> 
</ul> 

Este es el resultado de este código en mi máquina:

enter image description here

+0

Gracias. ¡Esto es lo que necesito! –

+0

El uso de JSTL Core o Core RT taglibs le daría una solución más elegante en su página JSP. – Jonny

+2

Este es sin duda el mejor tutorial liferay que he visto en cualquier tema relacionado con él. Deben contratarlo para escribir documentación, tutoriales, artículos, wikis, demostraciones, libros y todo. – Nenotlep

3

Su pregunta es bastante vaga, recomiendo obtener una introducción al desarrollo de portlets, ya que parece ser sobre la comprensión básica de la infraestructura/especificación.

un intento de responder a su pregunta, dando algunos consejos - disculpas si también son demasiado vagos:

  • init() forma parte del ciclo de vida de portlets y será llamado una vez, cuando la clase es de portlets cargado.
  • Puede pasar valores a la vista por (por ejemplo) la solicitud de añadir atributos a su RenderRequest en doView()

por supuesto, esto varía de acuerdo con el marco de portlets que está utilizando - los métodos mencionados anteriormente son desde la especificación del portlet subyacente (es decir, JSR-286)

2

puede hacerlo de varias maneras:

1) Puede utilizar renderRequest.setAttribute("my-array", array);

2) Usted puede poner sus datos en una sesión

request.getPortletSession().setAttribute("my-array", array);

En el segundo caso no se olvide de eliminar su elemento de la sesión cuando no lo necesito más.

Cuestiones relacionadas