Использование пользовательских сервисов или сервисов LifeRay в темах LifeRay (шаблоны скорости)?

Как использовать метод пользовательских сервисов в темах LifeRay в скоростных файлах, таких как init_custom.vm, portal_normal.vm и т.п.

Я вижу, что liferay предоставляет множество переменных вспомогательных служебных классов, таких как $portalUtil за PortalUtil, $getterUtil за GetterUtil и так далее, внутри init.vm файл.

Так можно ли получить экземпляр моих пользовательских сервисов, как экземпляр com.my.custom.service.MyCustomLocalServiceImpl или услуги liferay от UserLocalServiceImpl?

Вот некоторый код psuedo, чтобы дать представление о том, что мне нужно:

// 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 ответа

Решение

Это возможно.

  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) который фактически делает все переменные и вспомогательные утилиты доступными для шаблонов скорости.

Вы можете расширить контекст скорости, используемый в теме, с помощью пользовательских переменных и сервисов, используя следующий подключаемый модуль. Допустим, вам нужно использовать свой локальный сервис.

  1. создать подключаемый модуль со следующим определением liferay-hook.xml

    <hook>
        <portal-properties>portal.properties</portal-properties>
    </hook>
    
  2. создать portal.properties в main/resources (когда вы используете Maven) или в docroot/WEB-INF/src (когда вы используете плагины SDK), поместите туда следующую конфигурацию

    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())
    
Другие вопросы по тегам