В liferay есть что-то, что называется вложенными портлетами. Я хочу добавить этот портлет динамически с помощью кода. Кто-нибудь знает код для добавления вложенных портлетов и добавления в него других портлетов?
Спасибо !!!
В liferay есть что-то, что называется вложенными портлетами. Я хочу добавить этот портлет динамически с помощью кода. Кто-нибудь знает код для добавления вложенных портлетов и добавления в него других портлетов?
Спасибо !!!
для полного примера я предполагаю, что вы хотите добавить вложенный портлет на текущую страницу с помощью другого обработчика действий портлетов. (если используется из действия рендеринга, вы не увидите вложенный портлет до следующего просмотра страницы)
Добавьте эти методы в свой код
private static String addPortlet(final long p_userId, final Layout p_layout, final String p_portletId, final String p_columnId, final int p_position, final boolean p_checkPermission)
throws PortalException, SystemException
{
if (p_layout.isTypePortlet()) {
final LayoutTypePortlet layoutTypePortlet = (LayoutTypePortlet) p_layout.getLayoutType();
final String portletId = layoutTypePortlet.addPortletId(p_userId, p_portletId, p_columnId, p_position, p_checkPermission);
if (portletId != null) {
final String rootPortletId = PortletConstants.getRootPortletId(portletId);
final String portletPrimaryKey = PortletPermissionUtil.getPrimaryKey(p_layout.getPlid(), portletId);
ResourceLocalServiceUtil.addResources(p_layout.getCompanyId(), p_layout.getGroupId(), 0, rootPortletId, portletPrimaryKey, true, true, true);
LayoutLocalServiceUtil.updateLayout(p_layout.getGroupId(), p_layout.isPrivateLayout(), p_layout.getLayoutId(), p_layout.getTypeSettings());
}
return portletId;
}
return null;
}
private static void addNestedPortlet(final PortletRequest p_request) throws PortalException, SystemException {
final ThemeDisplay themeDisplay = (ThemeDisplay) p_request.getAttribute(WebKeys.THEME_DISPLAY);
final Layout layout = themeDisplay.getLayout();
long userId = themeDisplay.getUserId();
//create nested portlet and add it to "column-1"
final String nestedPortletId = addPortlet(userId, layout, "118", "column-1", -1, false);
//this will be used to target nested portlet's columns
final String nestedColumnPrefix = "_" + nestedPortletId + "__";
//default page layout (used by nested portlet) has two columns
//we'll add two portlets (in this example two iframe portlets), one portlet to each column
addPortlet(userId, layout, "48", nestedColumnPrefix + "column-1", -1, false);
addPortlet(userId, layout, "48", nestedColumnPrefix + "column-2", -1, false);
}
Если вы хотите и, возможно, захотите добавить вложенный портлет на другую страницу или не из портлета, вы можете искать Макет и Пользователь вместо того, чтобы получать их из ThemeDisplay.