Как найти портлеты, добавленные на определенной странице в Liferay?

Как я могу найти, какие портлеты добавляются на определенной странице Liferay?

Пример:
У меня есть три страницы: Добро пожаловать, Вики и Поиск.

Теперь на всех этих страницах есть портлеты, добавленные на них, а некоторые из них являются экземплярами портлетов (например, отображения веб-контента и портлетов iframe).

Теперь я хочу передать некоторую информацию в форме параметров запроса в iframe-portlet в Search page из Welcome page.

Ответы

Ответ 1

Я нашел два способа сделать это:

  • Если вы хотите найти портлеты на той же странице, на которой добавлен портлет, вы можете использовать объект themeDisplay, доступный вашему портлету или JSP:

    // In JSP
    List<String> portletIdList = themeDisplay.getLayoutTypePortlet().getPortletIds();
    
    // In portlet class
    ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest.getAttribute(WebKeys.THEME_DISPLAY);
    List<String> portletIdList = themeDisplay.getLayoutTypePortlet().getPortletIds();
    
  • Если вы хотите найти портлеты на другой странице, вам следует знать три вещи: friendly-url, groupId и является ли эта страница public-page или private-page сайта (или сообщества), так что вот код:

    // 101543 is the SiteId, if it is a public-page then "false" and "/search" is the friendlyURL
    LayoutTypePortlet layoutTypePortlet = LayoutTypePortletFactoryUtil.create(LayoutLocalServiceUtil.getFriendlyURLLayout(101543, false, "/search"));
    List<String> portletIdList = layoutTypePortlet.getPortletIds();
    

portletIdList содержит портлеты с их экземплярами. Итак, теперь из списка вы можете просто отфильтровать iframe-portlet на странице /search с помощью com.liferay.portal.util.PortletKeys.IFRAME, и вы получите что-то вроде 48_INSTANCE_rPv9.