liferay - 如何通过代码添加嵌套的 portlet(liferay)

标签 liferay portlet liferay-6

我们在liferay 中有一个叫做嵌套portlet 的东西。我想通过代码动态添加这个 portlet。有谁知道用于添加嵌套 portlet 并在其中添加其他 portlet 的代码?

谢谢 !!!

最佳答案

对于完整的示例,我假设您想使用另一个 portlet 操作处理程序将嵌套的 portlet 添加到当前页面。 (如果在渲染操作中使用,则在下一次页面 View 之前您不会看到嵌套的 portlet)

将这些方法添加到您的代码中

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);
}

如果您愿意,并且可能愿意,将嵌套的 portlet 添加到另一个页面或不从 portlet 添加,您可以查找布局和用户,而不是从 ThemeDisplay 获取它们。

关于liferay - 如何通过代码添加嵌套的 portlet(liferay),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8395944/

相关文章:

jsp - Liferay:创建一个 portlet 配置页面。如何提供正确的jsp路径?

javascript - Liferay 7 : Retrieved custom field value using javascript api jsonws return java. lang.NullPointerException

java - LIferay 中的 Portlet 未保存到数据库会引发 InvocableTargetException

liferay - Liferay 将其数据保存在哪里?

java - 如何通过liferay中的portlet conf选项卡修改属性文件?

Liferay MVCPortlet 连接 FORM actionURL 和 action

java - Liferay 中不同的 "request"隐式对象

java - 从弹出窗口中的 portlet 刷新 portlet

java - 在 Liferay 门户上使用 Alfresco 和 Jackrabbit CMS 的比较

java - 名称属性未在 Liferay Portlet 中呈现