Программно получить 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()}