среда, 18 июля 2012 г.

Инициализация новых объектов в Velocity. Liferay.

В Liferay (6.1.1) возникла проблема с отображением подменю в навигации, если страница является скрытой (hidden). Дело в том, что эта страница не попадает в массив элементов $nav_items, доступный в шаблоне (velocity, в данном случае).

Некоторое время траха поисков привели к такому варианту:

#set($layoutLocalService = $serviceLocator.findService("com.liferay.portal.service.LayoutLocalService"))

#set($longClass = $portal.getClass().forName("java.lang.Long"))
#set($longClassPrimitive = $longClass.getDeclaredField("TYPE").get(null))
#set($httpServletRequestClass = $portal.getClass().forName("javax.servlet.http.HttpServletRequest"))
#set($themeDisplayClass = $portal.getClass().forName("com.liferay.portal.theme.ThemeDisplay"))
#set($requestVarsClass = $portal.getClass().forName("com.liferay.portal.theme.RequestVars"))
#set($navItemClass = $portal.getClass().forName("com.liferay.portal.theme.NavItem"))
#set($layoutClass = $portal.getClass().forName("com.liferay.portal.model.Layout"))

#set($requestVars = $requestVarsClass.getConstructor($httpServletRequestClass, $themeDisplayClass, $longClassPrimitive, $longClassPrimitive).newInstance($request, $themeDisplay, $layout.getAncestorPlid(), $layout.getAncestorLayoutId()))

#set($ancessorLayout = $layoutLocalService.getLayout($layout.getAncestorPlid()))
#set($currentNavItem = $navItemClass.getConstructor($requestVarsClass, $layoutClass).newInstance($requestVars, $ancessorLayout ))


работает на ура.

2 комментария:

  1. Привет, начиная с версии 6.1.20 EE GA2 в сигнатуре конструктора класса RequestVars появился ещё один параметр TemplateContext templateContext. Чтобы работал вышенаписанный код, поправьте/добавьте эти строчки:
    #set($templateContextClass = $portal.getClass().forName("com.liferay.portal.kernel.templateparser.TemplateContext"))
    #set($velocityContextImplObj = $portal.getClass().forName("com.liferay.portal.velocity.VelocityContextImpl").getConstructor().newInstance())

    ОтветитьУдалить
    Ответы
    1. спасибо, что не поленились и рассказали об обновлении! думаю, тот кто найдет эту страницу найдет и обновление для 6.1.20 от вас )

      Удалить