在liferay主题(速度模板)中使用自定义服务或liferay服务?

时间:2012-08-21 11:32:48

标签: service liferay liferay-velocity liferay-theme

如何在诸如init_custom.vmportal_normal.vm之类的力度文件中的liferay主题中使用自定义服务方法。

我看到liferay提供了很多辅助工具类的变量,例如PortalUtil$portalUtilGetterUtil$getterUtil等等,init.vm内部文件。

那么可以从com.my.custom.service.MyCustomLocalServiceImpl获取我的自定义服务的实例,例如UserLocalServiceImpl的实例或liferay的服务吗?

这是一些伪代码,用于了解我的需求:

// 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

2 个答案:

答案 0 :(得分:6)

有可能。

  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))
    
  3. 对于Liferay 6.1 CE GA1:我发现这个类VelocityVariablesImpl(参见像insertHelperUtilitiesinsertVariables这样的方法)实际上使得所有变量和辅助工具可用于速度模板。

答案 1 :(得分:3)

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

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

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

    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. 部署挂钩后,
  6. 可以在主题的速度模板中使用自定义服务

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