Liferay Freemaker: как получить объект запроса в шаблоне?

Я использую Liferay 6.2 и freemaker для шаблонов веб-контента. Мне нужно получить объект запроса в шаблоне. Когда я пытаюсь использовать ${Request.getRequest()}, выдает ошибку Expression Request is undefined. Полный код здесь

<#assign userService=utilLocator.findUtil('my-portlets', org.test.service.UserService')>
 <#if userService.isUser(Request.getRequest())>
     <h1>is User</h1>
 </#if>

Мой метод обработки для userService

public Boolean isUser(HttpServletRequest request) {
    //some logic
    return true;
}        

Как я могу получить объект запроса в шаблоне freemaket ftl?


person jahra    schedule 15.01.2016    source источник
comment
$request — это неявный объект, доступный в шаблонах.   -  person Parkash Kumar    schedule 15.01.2016
comment
Однако, если вы хотите получить httpServletRequest объект, вы можете получить его: #set ($serviceContext = $portal.getClass().forName("com.liferay.portal.service.ServiceContextThreadLocal").getServiceContext()) #set ($httpServletRequest = $serviceContext.getRequest())   -  person Parkash Kumar    schedule 15.01.2016
comment
Спасибо! Но можете ли вы опубликовать свой ответ более развернуто с небольшим примером? @ПаркашКумар   -  person jahra    schedule 15.01.2016
comment
В вашем случае это сработало?   -  person Parkash Kumar    schedule 15.01.2016
comment
Нет, он падает с Unknown directive: #set @ParkashKumar   -  person jahra    schedule 15.01.2016
comment
О, вы используете ftl язык в шаблонах, тогда вы можете использовать <#assign> вместо #set.   -  person Parkash Kumar    schedule 15.01.2016
comment
Вы можете использовать его как: <#assign $serviceContext = $portal.getClass().forName("com.liferay.portal.service.ServiceContextThreadLocal‌​").getServiceContext()> <#assign $httpServletRequest = $serviceContext.getRequest()>   -  person Parkash Kumar    schedule 15.01.2016
comment
Сейчас Expression $portal is undefined :( @ParkashKumar   -  person jahra    schedule 15.01.2016
comment
Проверьте свой ресурс freemarker.engine.restricted.variables= в portal.properties и убедитесь, что он не добавляет $portal в свой список.   -  person Parkash Kumar    schedule 15.01.2016
comment
Вот полный список Неявные объекты и переменные   -  person Parkash Kumar    schedule 15.01.2016
comment
А вот и Ответ, который соответствует вашему вопросу.   -  person Parkash Kumar    schedule 15.01.2016


Ответы (2)


Вы можете просто использовать переменную запроса, как в

<#if request.getParameter("something")??>

Я нахожу этот файл всегда полезным

https://github.com/agmip/liferay-portal-impl/blob/master/src/com/liferay/portal/freemarker/FreeMarkerVariablesImpl.java

Кроме того, использование $, вероятно, вызывает у вас некоторые проблемы, так как оно не используется в скорости.

person Victor    schedule 15.03.2016

Переменные FreeMarker чувствительны к регистру и не начинаются со знака $ (как в Velocity).

Используйте переменную request.

person rostanek    schedule 23.01.2016