Fórum

Clonar Portlet Site Map

thumbnail
Oscar Morro Martí, modificado 14 Anos atrás.

Clonar Portlet Site Map

Junior Member Postagens: 42 Data de Entrada: 06/02/08 Postagens Recentes
Muy buenas a todos. Por temas de diseño tengo que clonar el portlet SiteMap para poder configurarlo de modo que este sea compartido para todas las comunidades que tengo.

Para ello con el plugin sdk, me cree un nuevo portel..y he intentado clonar el portlet siteMap en el nuevo portlet creado. Cogiendo todo lo que veía que era necesario. El portlet site map es un portlet basado en struct, por lo que tuve que añadirle a mi portlet los archivos
struts-config.xml y tiles-defs.xml. EL portlet se me registra de forma correcta y me aparece al añadir los portlets, pero cuando voy a añadirlo me sale el siguiente error:


[RMICallHandler-7] ERROR portal-web.docroot.html.portal.render_portlet.jsp - java.lang.NullPointerException
at com.liferay.portlet.InvokerPortletImpl.invoke(InvokerPortletImpl.java
:616)
at com.liferay.portlet.InvokerPortletImpl.invokeRender(InvokerPortletImp
l.java:698)
at com.liferay.portlet.InvokerPortletImpl.render(InvokerPortletImpl.java
:417)
at _html._portal._render__portlet._jspService(_render__portlet.java:1361
)
at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:5
9)
at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:462)
at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:597)
at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:521)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletReque
stDispatcher.java:712)

Doy por hecho que no estoy haciendo bien algo, ¿alguien podría darme unos pequeños pasos o consejos para clonar un portlet (como site map ) basado en struct y tenerlo en un war aparte?

Muchas Gracias
thumbnail
Julio Camarero, modificado 14 Anos atrás.

RE: Clonar Portlet Site Map

Liferay Legend Postagens: 1668 Data de Entrada: 15/07/08 Postagens Recentes
Hola Oscar,

lo que has intentado no es tan sencillo como parece.... tiene bastantes implicaciones. Los portlets del core de Liferay son portlets de tipo Liferay Struts (que fue una adaptación que hizo Liferay de Struts antes de aparecer el bridge de Apache) y de hecho, creo que no pueden funcionar por sí solos fuera del core de Liferay (es decir, usando el entorno de extensión).

Si quieres utilizar Struts, lo que se recomienda es el bridge de Apache, hay un portlet de ejemplo en la sección de descargas.

Sin embargo, mi recomendación es que te hagas un jsp Portlet (también llamado ahora mvc portlet) que es el tipo de portlet más simple y del que también hay ejemplos y añadas allí las partes que quieras del sitemap.

un saludo,

Julio Camarero
Liferay España
thumbnail
Oscar Morro Martí, modificado 14 Anos atrás.

RE: Clonar Portlet Site Map

Junior Member Postagens: 42 Data de Entrada: 06/02/08 Postagens Recentes
Muchas Gracias Otra vez Julio, como ves sigo peleandome con esto jeje. Pensaba que sería más facil el replicar el portlet, pero conforme fui investigando vi que la cosa se complicaba. Voy a seguir tu consejo y voy a hacerlo así a ver si logro que me funcione. Ya os cuento como me ha ido.

Gracias de nuevo

saludos!
thumbnail
Julio Camarero, modificado 14 Anos atrás.

RE: Clonar Portlet Site Map

Liferay Legend Postagens: 1668 Data de Entrada: 15/07/08 Postagens Recentes
Me alegro de que te animes,
no dudes en preguntar cualquier problema con el que te encuentres.

Si finalmente consigues terminar el plugin, quizás te apetezca contribuirlo a liferay para que más gente pueda utilizarlo. Si es así dímelo y me encargo del proceso.

un saludo,

Julio Camarero
Liferay España
thumbnail
Oscar Morro Martí, modificado 14 Anos atrás.

RE: Clonar Portlet Site Map

Junior Member Postagens: 42 Data de Entrada: 06/02/08 Postagens Recentes
Hola Julio, he hecho lo que me has comentado, me he creado un portlet jsp y he añadido las partes del portlet site_map que necesitaba y he conseguido que me muestre en pantalla mi menú.

El problema viene cuando intento configurar mi nuevo portlet creado para que sea compartido para toda la compañia y no solo en la comunidad que lo he creado.

En principio mi portlet va a ser no instanciable, por lo que pongo la propiedad instanciable del archivo liferay-portlet.xml a false. Esto funciona correctamente puesto que al generar el portlet ya no le mete ningún identificador.

El error salta cuando le indico que mi portlet sea compartido para toda la compañia y no solo para la comunidad donde lo añado ( como el portlet de anuncios creo que es ). Según he leido, poniendo la propiedad <preferences-company-wide>true</preferences-company-wide> y siendo mi portlet no instanciable ya bastaría para lograr lo que quiero...pero esto me produce el error que ya indiqué al principio de este post, y aquí ya ando algo perdido porque no se en que momento se llama a esta jsp o que tengo que hacer en mi nuevo portlet para que sea compartido para toda la compañia..

Adjunto otra vez la traza del error por si alguien sabe por donde pueden ir los tiros...


2009-06-02 17:48:41,896 [RMICallHandler-16] ERROR portal-web.docroot.html.portal
.render_portlet.jsp - java.lang.NullPointerException
at _html._portal._render__portlet._jspService(_render__portlet.java:1361
)
at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:5
9)
at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:462)
at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:597)
at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:521)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletReque
stDispatcher.java:712)
at com.evermind.server.http.ServletRequestDispatcher.unprivileged_includ
e(ServletRequestDispatcher.java:159)
at com.evermind.server.http.ServletRequestDispatcher.access$000(ServletR
equestDispatcher.java:50)
at com.evermind.server.http.ServletRequestDispatcher$1.oc4jRun(ServletRe
questDispatcher.java:96)
at oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:283)

at com.evermind.server.http.ServletRequestDispatcher.include(ServletRequ
estDispatcher.java:101)
at com.liferay.portal.util.PortalImpl.renderPortlet(PortalImpl.java:2862
)
at com.liferay.portal.util.PortalImpl.renderPortlet(PortalImpl.java:2784
)
at com.liferay.portal.util.PortalUtil.renderPortlet(PortalUtil.java:846)

at com.liferay.portal.action.RenderPortletAction.execute(RenderPortletAc
tion.java:96)
at com.liferay.portal.action.UpdateLayoutAction.addPortlet(UpdateLayoutA
ction.java:260)
at com.liferay.portal.action.UpdateLayoutAction.execute(UpdateLayoutActi
on.java:211)
at org.apache.struts.action.RequestProcessor.processActionPerform(Reques
tProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.ja
va:236)

Gracias de antemano!
thumbnail
Julio Camarero, modificado 14 Anos atrás.

RE: Clonar Portlet Site Map

Liferay Legend Postagens: 1668 Data de Entrada: 15/07/08 Postagens Recentes
Hola Óscar,

lo que indicas es correcto... si es no-instanciable y las preferencias son company-wide debería funcionar como esperas....

el error está dando porque hay algo que es null al pintar el portlet (esto se hace con un jsp del core llamado render_portlet.jsp)
Si tienes las fuentes de liferay, igual puedes ir sacando trazas de ese jsp para ver qué es lo que está fallando para que te de la NullPointerException....

un saludo!

Julio Camarero
Liferay España
thumbnail
Oscar Morro Martí, modificado 14 Anos atrás.

RE: Clonar Portlet Site Map

Junior Member Postagens: 42 Data de Entrada: 06/02/08 Postagens Recentes
Hola Julio, al final logré mi objetivo y he podido hacer lo que quería. El error que te había reportado era porque me faltaba añadir una .jsp que necesitaba y no me había dado cuenta. Por otra parte, el problema que tenía y por lo que no conseguía que me saliera siempre la misma comunidad, es que al construir el site map, al obtener las páginas se le pasaba la comunidad, por lo que no podía conseguir lo que quería.


List<Layout> rootLayouts = LayoutLocalServiceUtil.getLayouts(layout.getGroupId(), layout.isPrivateLayout(), rootLayoutId);


Modificando esto tanto en el view.jsp como en configuration.jsp y pasandole la comunidad que a mi me interesaba logré obtener lo que me hacía falta.

Saludos y gracias!
Xavi Fibla Agustín, modificado 14 Anos atrás.

RE: Clonar Portlet Site Map

New Member Postagens: 24 Data de Entrada: 15/03/09 Postagens Recentes
Hola,

Tengo que hacer un portlet muy parecido al del blog.

Me gustaria saber si se puden clonar los portlets ya existentes.
Solo copiando las jsp del portlet no me funciona.

¿Hay alguna forma rápida para clonar/duplicar los portlets propios del liferay?

Gracias,

Saludos,
thumbnail
Julio Camarero, modificado 14 Anos atrás.

RE: Clonar Portlet Site Map

Liferay Legend Postagens: 1668 Data de Entrada: 15/07/08 Postagens Recentes
Hola Xavi,

es normal que no te funcione, porque además de jsps, el portlet tiene archivos de configuración (xml), struts y clases java.

No hay una forma rápida de clonar portlets del core, ya que éstos portlets usan el Bridge de Struts Liferay (anterior al estándar), y los plugins utilizan el Bridge de Struts de Apache. Sin embargo, con un poco de cuidado, puedes reutilizar todos los jsp y la mayoría de los métodos de las clases java, por lo que sólo tendrás que adaptar ligeramente la configuración de struts, los action, y los archivos de configuración del portlet (portlet.xml, liferay-portlet.xml....)

Otra opción quizás más sencilla es desde tu nuevo portlet utilizar los servicios de blogs del core (en caso de que no necesites modificar los servicios...)

un saludo!

Julio Camarero
Liferay España
Xavi Fibla Agustín, modificado 14 Anos atrás.

RE: Clonar Portlet Site Map

New Member Postagens: 24 Data de Entrada: 15/03/09 Postagens Recentes
Gracias Julio,

Creo que empezaré por la opción más senzilla, utilizando los servicios del core como comentas.

Saludos,