我在使用页面模板以编程方式创建页面时遇到问题。页面的创建工作正常,但它没有将页面模板应用于页面。我搜索并发现始终相同的代码片段。也没有错误。
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);
}
}
答案 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。这是页面模板与站点模板。