Liferay 6.2:以编程方式创建页面模板不适用

时间:2015-02-27 21:29:08

标签: liferay

我在使用页面模板以编程方式创建页面时遇到问题。页面的创建工作正常,但它没有将页面模板应用于页面。我搜索并发现始终相同的代码片段。也没有错误。

ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
        long userId = themeDisplay.getUserId();
        long groupId = themeDisplay.getScopeGroupId();
        boolean privateLayout = false;
        long parentLayoutId = 0;
        String name = "Testpage";
        String title = null;
        String description = null;
        String type = LayoutConstants.TYPE_PORTLET;
        boolean hidden = false;
        String friendlyURL = "/testpage";
        ServiceContext serviceContext = new ServiceContext();
        serviceContext.setAddGroupPermissions(true);
        serviceContext.setAddGuestPermissions(true);
        Group group = themeDisplay.getScopeGroup();
        serviceContext.setScopeGroupId(group.getGroupId());
        serviceContext.setUserId(themeDisplay.getUserId());
        Layout layout = LayoutLocalServiceUtil.addLayout(userId, groupId, privateLayout, parentLayoutId, name, title, description, type, hidden, friendlyURL, serviceContext);

        List<LayoutSetPrototype> lsps = LayoutSetPrototypeServiceUtil.search(themeDisplay.getCompanyId(), Boolean.TRUE, null);
        for(LayoutSetPrototype lsp : lsps) {
            System.out.println("->" + lsp.getName() + " - " + lsp.getLayoutSetPrototypeId());
            if (HtmlUtil.escape(lsp.getName()).contains("kDSSMP")){
                System.out.println("hit");
                LayoutTypePortlet ltp = (LayoutTypePortlet) layout.getLayoutType();
                ltp.setLayoutTemplateId(userId, lsp.getUuid(), false);

                LayoutLocalServiceUtil.updateLayout(layout.getGroupId(), layout.isPrivateLayout(),layout.getLayoutId(), layout.getTypeSettings());
                addResources(layout, PortletKeys.DOCKBAR);
            }
        }

2 个答案:

答案 0 :(得分:0)

基本问题(如果我错了,请更正):&#34;点击&#34;打印并且未应用模板?

只是一个背景问题:你知道LR使用Layout来引用页面和模板来表示页面模板吗? (我想是的)

(如果我关于&#34;点击&#34;的说法是正确的)我不会尝试你的代码......但首先看起来似乎是正确的。

我有一段类似的代码片段(对于LR 6.1)我在其中写道:

layoutTypePortlet.setLayoutTemplateId(user.getUserId(), layoutTemplate);
LayoutLocalServiceUtil.updateLayout(layout);

唯一的区别似乎是setLayoutTemplateId(但false对于不检查权限是正确的)和LayoutLocalServiceUtil.updateLayout

最后一点Javadoc说:

  

updateLayout(布局布局):更新数据库中的布局,或者如果它尚不存在则添加它。

  

updateLayout(long groupId,boolean privateLayout,long layoutId,String typeSettings):更新布局,替换其类型设置。

最后一个注意事项是关于lsp.getUuid()使用......你确定它是正确的吗? 在javadoc中,它被声明为&#34; newLayoutTemplateId&#34;而不是UUID。

答案 1 :(得分:0)

使用LayoutPrototype而不是LayoutSetPrototype。这是页面模板与站点模板。