Как программно настроить макет «Ссылка на страницу» в Liferay 6.1? - PullRequest
2 голосов
/ 02 апреля 2012

В настоящее время я работаю с Liferay Portal Enterprise Edition 6.1 EE GA1 (Paton / Build 6110/15 февраля 2012 г.), который развернут на моей локальной машине (Win 7 / x64) для целей разработки и тестирования.Он работает в стандартном 7.0.25 Tomcat, и мы используем Spring MVC для разработки наших портлетов.

Я программно добавляю новый макет (страницу) в Liferay, и я устанавливаю тип этого типа как "link_to_layout""(LayoutConstants.TYPE_LINK_TO_LAYOUT).Макет создан успешно, но до сих пор я не выяснил, как я могу установить значение для ссылки, например что-то вроде "/ login".Ниже приведен код, который я использую для добавления макета:

// Spring specific code for getting the Request
HttpServletRequest request = null;    
ServletRequestAttributes sa = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
if( null != sa ){
    request = sa.getRequest();
}    
if (request == null) { break; }

// all values are usually retrieved via special methods from our code
// for better readability I have added the real values here
long userId = 10102;
int groupId = 13056;
boolean privateLayout = false;
long plid = LayoutConstants.DEFAULT_PARENT_LAYOUT_ID;
String title = "my title";
ServiceContext serviceContext = ServiceContextFactory.getInstance( request );
String layoutType = LayoutConstants.TYPE_LINK_TO_LAYOUT;
boolean hidden = false;
String friendlyURL = "/new-page";
// finally, add the layout
Layout layout = LayoutLocalServiceUtil.addLayout( userId, groupId, privateLayout, plid, title, title, StringPool.BLANK, layoutType, hidden, friendlyURL, serviceContext );

Теперь я могу вручную проверить, что страница была создана и для типа страницы установлено значение "link_to_layout", проверив страницы сайта вПанель управления.Там я вижу новую страницу с пустым значением "Ссылка на страницу".Я также могу проверить это программно, вызвав следующий код (который показывает сообщение в консоли):

if( layout.isTypeLinkToLayout() ){
 log.debug( "type is link to page" );
}

Если кто-нибудь знает, как установить значение ссылки на страницу, поделитесь своими знаниями смне.Большое спасибо за вашу помощь и ваши ответы: -)

С уважением, Матиас

1 Ответ

5 голосов
/ 03 апреля 2012

Потратив больше времени на устранение проблемы и отладку с помощью Liferay, я наконец-то нашел решение: значение страницы «ссылка на страницу» можно установить с помощью свойства в TypeSettingsProperties макета. Об этом позаботится ключ linkToLayoutId с необходимым идентификатором макета.

Следующий код работал для меня, и я надеюсь, что он будет полезен для других разработчиков:

// Spring specific code for getting the Request
HttpServletRequest request = null;    
ServletRequestAttributes sa = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
if( null != sa ){
    request = sa.getRequest();
}    
if (request == null) { break; }

// all values are usually retrieved via special methods from our code
// for better readability I have added the real values here
long userId = 10102;
int groupId = 13056;
boolean privateLayout = false;
long plid = LayoutConstants.DEFAULT_PARENT_LAYOUT_ID;
String title = "my title";
ServiceContext serviceContext = ServiceContextFactory.getInstance( request );
String layoutType = LayoutConstants.TYPE_LINK_TO_LAYOUT;
boolean hidden = false;
String friendlyURL = "/new-page";
// add the layout
Layout layout = LayoutLocalServiceUtil.addLayout( userId, groupId, privateLayout, plid, title, title, StringPool.BLANK, layoutType, hidden, friendlyURL, serviceContext );
String LinkToPageUrl = "/login";
Layout linkToPageLayout = LayoutLocalServiceUtil.getFriendlyURLLayout( groupId, false, linkToPageUrl);
long linkToPageId = linkToPageLayout.getLayoutId();
// set the value of the "link to page"
UnicodeProperties props = layout.getTypeSettingsProperties();
props.put( "linkToLayoutId", Long.toString( linkToPageId ) );
layout.setTypeSettingsProperties( props );
LayoutLocalServiceUtil.updateLayout( layout ); // crucial, 'cause otherwise the changes will not appear on the layout
...