Freemarker 不分配 staticUtil
Posted
技术标签:
【中文标题】Freemarker 不分配 staticUtil【英文标题】:Freemarker does not assign staticUtil 【发布时间】:2016-09-17 10:22:46 【问题描述】:我在liferay 6.2上工作过Application Display Templates,我使用freemarker帮助对liferay的动态数据列表进行分页。当我升级到 liferay 7 时,这是一个问题。 Liferay 7 使用代码<#assign records = ddlDisplayTemplateHelper.getRecords(reserved_record_set_id)>
获取记录。
旧代码:
<#assign DDLRecordLocalService = serviceLocator.findService("com.liferay.portlet.dynamicdatalists.service.DDLRecordLocalService")> <#assign records = DDLRecordLocalService.getRecords(reserved_record_set_id)> <#assign totalRecord = DDLRecordLocalService.getRecordsCount(reserved_record_set_id, 0) >
它不起作用。
所以我尝试<#assign serviceLocator = staticUtil["com.liferay.portal.template.ServiceLocator"]>
但staticUtil
出错。
以下已评估为 null 或缺失: ==> staticUtil [在模板“20115#20159#21387”第 9 行第 27 列] 提示:如果已知失败的表达式合法地引用了有时为 null 或缺失的内容
在 portal-ext.properties 中我添加了:
freemarker.engine.restricted.classes=
freemarker.engine.restricted.packages=
freemarker.engine.restricted.variables=
【问题讨论】:
【参考方案1】:在liferay-ce-portal-7.1.1.2-ga3版本中,文件重命名为
com.liferay.portal.template.freemarker.configuration.FreeMarkerEngineConfiguration.config
【讨论】:
【参考方案2】:在 Liferay 7.1 中。你会在
下找到 Freemaker Engine控制面板 -> 系统设置 -> 平台 -> 模板引擎
【讨论】:
【参考方案3】:进入控制面板->系统设置->基础页面
从列表中找到FreeMarker Engine点击它。
通过单击 (-) 图标从受限变量中删除 serviceLocator 变量和 staticUtil。
如果您想使用 staticUtil 对象,则还要从受限变量中删除此变量。
保存。
重启 Liferay 服务器。
您将直接访问应用程序显示模板中的 serviceLocator 对象。
【讨论】:
【参考方案4】:您引用的属性已移至 Liferay 7/DXP 中的 OSGI 配置。
要部署它们,您需要创建一个名为 com.liferay.portal.template.freemarker.configuration.FreeMarkerEngineConfiguration.cfg 的文件并将其放在 $LIFERAY_HOME/osgi/configs
文件内容如下:
restrictedVariables=
要查找所有配置及其默认值,您可以查看 com.liferay.portal.template.freemarker.configuration.FreeMarkerEngineConfiguration
类
你可以在 Liferay 源代码中找到。
【讨论】:
它似乎不适用于我的本地环境。我完全按照你说的做了。你知道这是否已经被弃用了吗? 这是 LR 7 的正确过程,但只是作为此处的增量,您可以微调以使用您需要的内容,留下其他限制...restrictedVariables=["","utilLocator"," objectUtil","staticFieldGetter","staticUtil"]【参考方案5】:我认为 portal-ext.properties 中的那些属性在 liferay 7 中被忽略了。
您可以在控制面板 → 配置 → 系统设置 → 基础 → FreeMarker 引擎中管理这些属性,并从受限变量中删除“staticUtil”(或直接删除“serviceLocator”)。 (需要重启 Liferay)
【讨论】:
它们不会被忽略,它们已被移入 OSGI 配置文件。根据我所经历的版本和服务包,从控制面板更新它们可能会导致 Liferay 实例停止(不再启动),所以我强烈反对这样做 在从控制面板更新这些值时,我也遇到了 Liferay DXP 中断。你必须做一些数据库 Foo 才能让 LR 再次启动。我会在上面投票给你。 对于任何有 LR 启动问题的人,这是我为重新启动 LR 所做的:youtu.be/Aot3oRP7hDg @Totò 我已经尝试在 osgi 文件夹中创建一个文件 com.liferay.portal.template.freemarker.configuration.FreeMarkerEngineConfiguration.cfg,如下面的答案中所述,但它似乎没有效果.你知道它有什么问题吗?以上是关于Freemarker 不分配 staticUtil的主要内容,如果未能解决你的问题,请参考以下文章
如果 Freemarker 中不存在 XML 节点,则分配空字符串