Вызов методов Java в portal_normal.vm
У меня есть тема, реализованная в Liferay. У меня на панели управления есть портлет формы, который пользователь может заполнить. В зависимости от значений, вставленных в портлет, домашняя страница темы должна отображаться по-разному.
Я думал использовать что-то подобное, но это не работает:
#set($typeLong = $portal.getClass().forName('java.lang.Long').getField('TYPE').staticValue)
#set($personalOptions = $portal.getClass().forName("com.mypackage.utils.Configuration").getMethod("getStrings", $typeLong).invoke(null,$scopeGroupId))
где мой "getStrings" - это метод, определенный в классе "Configuration" с входным значением long и возвращением массива String[].
Любые советы?
1 ответ
Не иди по этому маршруту. Это может работать при нескольких обстоятельствах, но это не более чем сумасшедший взлом. Это сломается в некоторых видах условий.
Имейте в виду, что ваша тема может быть в другом загрузчике классов, чем ваш портлет - таким образом, ваша com.mypackage.utils.Configuration
класс может даже не быть доступным.
ИМХО показ личного контента - это часть бизнес-логики, которую лучше всего инкапсулировать в портлет - и вы можете встроить портлеты в тему, чтобы они автоматически отображались на каждой странице. Портлет также может быть реализован так, чтобы ничего не показывать, если в этом нет необходимости. Добавьте причудливый CSS в свою тему (именно для этого портлета), чтобы она выглядела особенной. Например, панель Dockbar или чат-портлет Liferay: оба являются портлетами с причудливым CSS: они не похожи на портлеты, но на самом деле они есть. И они автоматически встраиваются в каждую страницу.
Отдельные вопросы, актуальный контент и личные данные в портлетах. Ваши будущие сопровождающие будут благодарить вас (даже если вы будете благодарить вас только за будущее)