Доступ к глобальной переменной скорости Liferay в пользовательском портлете

На данный момент Liferay предоставляет набор глобальных переменных, определенных в init.vm, которые могут использоваться шаблонами тем. Эти переменные задаются в init.vm и находятся внутри Liferay ROOT.war: $PATH_TO_WEBAPPS/ROOT/html/themes/_unstyled/templates.

И внутри моей пользовательской темы portal_normal.vm я мог бы использовать ее, просто добавив #parse ($init). Который отлично работает.

Теперь переходим к моей проблеме. Я использую шаблон скорости для отправки моего адреса электронной почты. Итак, внутри моего портлета я создал шаблон электронной почты в месте как $SOME_PORTLET_NAME/src/main/webapps/template/email.vm. Я мог бы отправить пользовательские переменные в шаблон, используя

VelocityContext velocityContext = new VelocityContext();
velocityContext.put("vp", velocityParameters);

Но я не мог использовать переменные по умолчанию, предоставленные Liferay, которые используются в теме.

Я пытаюсь использовать $languageUtil.get для интернационализации в своем шаблоне электронной почты.

Что я пробовал?

  • Клонирование init.vm внутри шаблона и его импорт. Что не сработало; глупый я.
  • Укажите полный путь к местоположению ROOT.war init.vm. Это тоже не сработало (я удивлен, что это должно было сработать).

Вопрос:

  • Есть ли способ использовать эти глобальные переменные скорости в пользовательских портлетах (например, вне темы)?

  • Может ли это быть достижимо с помощью Java?

  • Или лучше выполнить LanguageUtil.get и отправить значение только в шаблон (это был бы мой последний вариант)?

Спасибо!!


person Runcorn    schedule 16.02.2015    source источник


Ответы (1)


Это может быть не полный ответ, а указатель, с чего начать: вы создаете пустой VelocityContext. Это, естественно, пусто — ничего удивительного.

Когда Liferay выполняет свой init.vm и другие шаблоны, он не запускается в пустом контексте (хотя init.vm кажется очень простым). В зависимости от вашей версии Liferay найдите VelocityVariablesImpl или TemplateContextHelper для инициализации контекста сценария.

Обратите внимание, что все это находится в portal-impl, то есть в реализации Liferay, к которой у вас обычно нет доступа. Возможно, вам придется дублировать интересующие вас части кода, поскольку обычно вы не можете вызывать их напрямую. Но тогда вам, вероятно, не нужна и полная инициализация.

Если это поможет вам найти фактическое решение, опубликуйте несколько советов о том, с чем вы на самом деле согласились (или ссылку на него).

person Olaf Kock    schedule 16.02.2015
comment
Спасибо за толчок... Я постараюсь и сообщу вам результат... Еще раз спасибо. - person Runcorn; 16.02.2015