有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Lifefay freemarker ADT:方法不可用?

我正在尝试为asset publisher开发一些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类公共方法(和扩展类),对吗

我错过了什么


共 (1) 个答案

  1. # 1 楼答案

    资产呈现器呈现给定类的资产条目(ei.JournalArticleDLFileEntry)。资产呈现器本身不是给定类的实例(在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>
    

    请注意,您需要通过在portal-ext.properties中设置freemarker.engine.restricted.variables=来显式启用serviceLocator的用法