2015-06-18 5 views
0

Я пытаюсь работать на некоторых ADT для издателя активов (Документы и тип средств массовой информации), но у меня часто есть сообщение о том, что мне:Lifefay freemarker ADT: методы недоступны?

Expression assetRenderer.getDataRepositoryId is undefined 

или

Expression assetRenderer.getFileEntryId is undefined 

Я нашел некоторые темы где люди говорили, что мы должны добавить

velocity.engine.restricted.classes= 
velocity.engine.restricted.variables= 
freemarker.engine.restricted.classes= 
freemarker.engine.restricted.variables= 

в portal-ext.properties, чтобы получить еще несколько классов и переменные доступны, но до сих пор я не могу назвать некоторые методы, и я не знаю, почему.

Я сделал

${assetRenderer.getClassName()} 

, который возвращает: com.liferay.portlet.documentlibrary.model.DLFileEntry

Так что я должен быть в состоянии использовать любые публичные методы класса DLFileEntry (и расширенные классы), не так ли?

Что мне не хватает?

ответ

3

Средство рендеринга активов предоставляет позиции актива данного класса (например, JournalArticle или DLFileEntry в вашем случае). Средство рендеринга объектов не является экземпляром данного класса (в смысле Java). Это всегда экземпляр com.liferay.portlet.asset.model.AssetRenderer.

Чтобы получить экземпляр связанного DLFileEntry, вы должны использовать DLFileEntryLocalService, чтобы его найти.

<#-- Obtains instance of DLFileEntryLocalService --> 
<#assign DLFileEntryLocalService = serviceLocator.findService("com.liferay.portlet.documentlibrary.service.DLFileEntryLocalService") /> 

<#-- Function returning underlying DLFileEntry for the given AssetEntry --> 
<#function getDLFileEntry assetEntry> 
    <#return DLFileEntryLocalService.getDLFileEntry(assetEntry.getClassPK())/> 
</#function> 

Пожалуйста, обратите внимание, что вам необходимо включить использование serviceLocator явно установив freemarker.engine.restricted.variables= в portal-ext.properties.

+0

Отлично спасибо :) – Lempkin

Смежные вопросы