3

如何在速度文件(如等)的 liferay 主题中使用自定义服务init_custom.vm方法portal_normal.vm

我看到 liferay 在文件中提供了许多辅助实用程序类的变量,例如$portalUtilfor PortalUtil$getterUtilforGetterUtilinit.vm

那么是否有可能获得我的自定义服务的实例,例如com.my.custom.service.MyCustomLocalServiceImplliferay 的实例或服务UserLocalServiceImpl

这是一些伪代码,以了解我需要什么:

// this code calls method from MyCustomLocalServiceImpl class to fetch items
#set ($listOfItems = $myCustomLocalServiceUtil.getAllItems())

// this code calls method from UserLocalServiceImpl class to fetch users
#set ($listOfUsers = $userLocalServiceUtil.getUsers(0, 99))

环境:Liferay 6.1 CE GA1

4

2 回答 2

7

有可能的。

  1. 以下代码显示了如何获取服务:

    // Fetching instance of my custom services
    #set ($myCustomLocalService = $serviceLocator.findService('myCustomServices-portlet', 'com.my.custom.service.MyCustomLocalService'))
    
    // Fetching instance of UserLocalServiceImpl
    #set ($userLocalService = $serviceLocator.findService('com.liferay.portal.service.UserLocalService'))
    
  2. 然后只需调用服务方法:

    #set ($listOfItems = $myCustomLocalService.getAllItems())
    
    #set ($listOfUsers = $userLocalService.getUsers(0, 99))
    

对于 Liferay 6.1 CE GA1:我找到了这个类VelocityVariablesImpl(参见方法,如insertHelperUtilities, insertVariables),它实际上使所有变量和辅助工具都可用于速度模板。

于 2012-08-21T11:32:47.790 回答
3

您可以使用以下钩子插件使用自定义变量和服务扩展主题中使用的速度上下文。假设您需要使用自定义本地服务。

  1. 使用以下 liferay-hook.xml 定义创建一个钩子插件

    <hook>
        <portal-properties>portal.properties</portal-properties>
    </hook>
    
  2. 在(当你使用 maven 时)或在(当你使用插件 sdk 时)创建portal.properties ,在那里放置以下配置main/resourcesdocroot/WEB-INF/src

    servlet.service.events.pre=com.my.custom.action.MyCustomPreAction
    
  3. 在您的钩子中创建com.my.custom.action.MyCustomPreAction将扩展的类com.liferay.portal.kernel.events.Action

  4. 实现run方法

    @Override
    public void run(final HttpServletRequest request, final HttpServletResponse response)
        throws ActionException {
    
        Map<String, Object> vmVariables = (Map<String, Object>) request.getAttribute(WebKeys.VM_VARIABLES);
        if (vmVariables == null) {
          vmVariables = new HashMap<String, Object>(1);
        }
        vmVariables.put("myCustomServiceUtil", com.my.custom.service.MyCustomLocalServiceUtil.class);
        request.setAttribute(WebKeys.VM_VARIABLES, map);
    }
    
  5. 部署钩子后,您可以在主题的速度模板中使用自定义服务

    // this code calls method from MyCustomLocalServiceImpl class to fetch items
    #set ($listOfItems = $myCustomServiceUtil.getAllItems())
    
于 2014-12-18T19:23:38.050 回答