Программно получить URL страницы в LifeRay

Я хочу создать ссылку в портлете, чтобы перейти на другую страницу на портале liferay. Я приказываю сделать так, чтобы я искал API (может быть специфичным для liferay), который, учитывая имя страницы, вернул бы ее url (это может быть и friendlyURL).

3 ответа

Решение

API для доступа к страницам в Liferay - LayoutService. Тем не менее, имена страниц не являются уникальными в Liferay и, более того, они интернационализированы. Таким образом, вам нужно какое-то уникальное свойство для страницы, чтобы получить ее URL, кроме ее имени.

Если у вас действительно есть только имя страницы, вы можете использовать LayoutLocalServiceUtil.getLayouts(...), чтобы перебрать все макеты и проверить какое-либо свойство (в данном случае его имя).

Страницы портала в Liferay действительно называются Layouts в API и таблицах БД. Они идентифицированы plid поле, можно получить с помощью LayoutLocalServiceUtil и связанные API, а также от некоторых других вызовов, таких как themeDisplay.getLayout(),

Однако для создания строки, содержащей URL-адрес страницы, вам нужно объединить дружественный URL-адрес портала, группы и самого макета (т.е. /web/guest/home - web URL портала для общедоступных страниц, guest является дружественным URL гостевой группы по умолчанию и home является дружественным URL домашней страницы / макета по умолчанию). Это может быть сложно, так как вы должны проверить, является ли это публичной или частной страницей и т. Д.

И как только вы начинаете использовать виртуальные хосты с удобными URL-адресами для групп, все меняется. Так что это не очень хороший способ.

Чтобы не создавать вручную URL-адреса и иметь URL-адреса, которые гарантированно будут правильными, следует использовать com.liferay.portal.util.PortalUtil.getLayoutFriendlyURL(Layout layout, ThemeDisplay themeDisplay) статический метод PortalUtil - он сделает всю необходимую работу за вас. Хотя вы также должны предоставить ThemeDisplay и не только макет.

По крайней мере, в Liferay 6.1.20 можно использовать "Ссылка URL-адреса портлета на страницу", чтобы ссылки переходили на другую страницу вашего портала. Он находится в пункте меню "посмотрите и почувствуйте" вашего портлета. Для меня это работает нормально.

ура

Попробуйте этот для текущего URL

${themeDisplay.getURLCurrent()}

попробуйте это для URL портала

${themeDisplay.getPortalURL()}
Другие вопросы по тегам