2015-02-27 3 views
0

У меня возникла проблема с созданием страницы программным образом с помощью шаблона страницы. Создание страницы работает, но она не применяет шаблон страницы к странице. Я искал и нашел всегда те же фрагменты кода. Также нет ошибок.Liferay 6.2: Создание страницы программного шаблона не применяется

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

Основной вопрос (пожалуйста, исправьте, если я ошибаюсь): «hit» напечатан и шаблон не применяется?

Только один вопрос: знаете ли вы, что LR использует макет для ссылки на страницу и шаблон, чтобы указать шаблон страницы? (Думаю, да)

(Если мое утверждение о «ударе» верно), я не пытаюсь использовать ваш код ... но сначала выглядит правильно.

У меня есть подобный фрагмент кода (LR 6.1), в котором я написал:

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

Единственное различие, кажется, на setLayoutTemplateId (но false правильно не проверять права доступа) и на LayoutLocalServiceUtil.updateLayout.

На последней точке Javadoc говорит:

UpdateLayout (Макет макет): Обновление макета в базе данных или добавляет его, если он еще не существует.

и

UpdateLayout (длинные идентификатор_группы, логический privateLayout, длинные layoutId, Струнные typeSettings): Обновление макета заменяющего его настройку типа.

Последняя заметка о lsp.getUuid() использованием ... вы уверены, что это правильно? В javadoc объявлен как «newLayoutTemplateId», а не UUID.

0

Используйте LayoutPrototype вместо LayoutSetPrototype. Это шаблон страницы и шаблон сайта.

Смежные вопросы