La primera necesita:
- Usando el "liferay-ext", modificar el fichero "portal_ext.proporties" y cambiar la entrada: "journal.template.velocity.restricted.variables= " es decir no debe tener valor o al menos no contener "serviceLocator" con ello tendremos una variable que nos permite acceder a servicios de Liferay.
- Si deseamos acceder a un servicio propio deberemos crearlo e insertalo usando "liferay-ext"
- Finalmente para acceder: desde dentro de la plantilla:
#set ($tagsService = $serviceLocator.findService("com.liferay.portlet.tags.service.TagsAssetLocalService"))
#set ($journalArticleResourceService = $serviceLocator.findService("com.liferay.portlet.journal.service.JournalArticleResourceLocalService"))
#set ($longGroupId = $getterUtil.getLong($groupId))
#set ($articleResourcePK = $journalArticleResourceService.getArticleResourcePrimKey($longGroupId, $reserved-article-id.data))
#set ($tagsAsset = $tagsService.getAsset("com.liferay.portlet.journal.model.JournalArticle", $articleResourcePK))
#set ($tagsEntries = $tagsAsset.getEntries())
Tags:
#foreach( $entry in $tagsEntries )
#set ($tag = $entry.getName())
#if($velocityCount!=1), #end
$tag
#end
La segunda alternativa no requiere modificar el fichero "portal_ext.properties" y consiste en:
#set ($tagsService = $portal.getClass().forName("com.liferay.portlet.tags.service.TagsAssetLocalServiceUtil").getMethod("getService", null).invoke(null, null))
#set ($journalArticleResourceService = $portal.getClass().forName("com.liferay.portlet.journal.service.JournalArticleResourceLocalServiceUtil").getMethod("getService", null).invoke(null, null))
Con ello accedemos también a los servicios.
Otro ejemplo, acceder al usuario que escribio el artículo e imprimir su nombre
#set ($userService = $serviceLocator.findService("com.liferay.portal.service.UserLocalService"))
#set ($user = $userService.getUserById($getterUtil.getLong($reserved-article-author-id.getData())))
$user.getScreenName()
Ejemplo propio
#set ($museumService = $serviceLocator.findService("com.muvac.service.MuseumLocalService"))
#set ($museum= $museumService.findById($museo.data))
Autor: ${autor.data}
Museo: ${museo.data}
Datos del museo
$museum.name
$museum.description
3 comentarios:
aupa tio! gracias por el ejemplo, estaba todo rallado intentando encontrar mi error y era que no pasaba a long y cambiar en el portal-ext.properties la propiedad esa.
un saludo!! y gracias
Gracias !!!... algo del código que utilizastes me funcionó para algo que estoy haciendo
saludos,
El problema de usar la segunda forma es que no tienes soporte para la captura de excepciones con lo que la plantilla petará si el metodo invocado del servicio lanza alguna.
Lo correcto sería usar:
-> $serviceLocaltor.findSaveExceptionService(...) y $utilLocaltor.findSaveExceptionUtil(...) en la version 5.1.x
-> $serviceLocaltor.findService(...) y $utilLocaltor.findUtil(...) en la version 5.2.x o superior.
Publicar un comentario