在 liferay web-content 中使用 staticUtil 服务抛出 freemarker 错误

Posted

技术标签:

【中文标题】在 liferay web-content 中使用 staticUtil 服务抛出 freemarker 错误【英文标题】:Using staticUtil service in liferay web-content throwing freemarker error 【发布时间】:2018-06-14 06:24:10 【问题描述】:

我必须在 web-content 中获取 ThemeDisplay() 来比较页面标题。我正在使用<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()> 获取服务上下文,但它抛出了下面提到的 freemarker 异常:

没有为此错误指定错误描述;低级消息:
 java.lang.ClassNotFoundException:com.liferay.portal.template.freemarker_2.0.29 找不到 com.liferay.portal.kernel.service.ServiceContext

----
FTL 堆栈跟踪(“~”表示嵌套相关):
    - 失败:#assign service = staticUtil["com.lif... [in template "20155#20195#54243" at line 21, column 1]
----

仅供参考:我已经在控制面板 freemarker 引擎中启用了 freemarker 引擎设置。也在 portal-ext.properties 文件中。

【问题讨论】:

你确定这个内核类应该在这个上下文中可用吗? 【参考方案1】:

我刚刚在我的 freemarker 模板中尝试了以下内容:

<#assign
serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() />

它从 Liferay 7 GA5 开始工作。您确定您已正确启用 Freemarker 变量吗?验证:

点击菜单->控制面板->配置->系统设置 搜索freemarker并回车 点击三个垂直点 -> 编辑 将staticUtil 更改为nonExistent 之类的东西(只是删除它为我带来了afaik)。 关闭服务器并从portal-ext.properties 文件中删除设置。没必要。

现在怎么样?

【讨论】:

如何使用属性来做到这一点?【参考方案2】:

感谢大家的宝贵回复,我发现它对我不起作用,因为我使用的是嵌入式网络内容。在那种情况下它不起作用:)

抱歉,我的问题中解释较少。实际上我不知道在主题中嵌入网络内容是另一种情况。

【讨论】:

以上是关于在 liferay web-content 中使用 staticUtil 服务抛出 freemarker 错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥不应该在 Liferay 的生产环境中使用 HSQLDB?

如何使用 javascript 在 Liferay 中检索用户个人资料图片

使用 liferay 和 icefaces 共享 Portlet 数据

liferay6关于liferay中使用requestMapping映射地址提交表单

如何在网络表单 Liferay 7 中支持文件上传?

如何使用管理员 Liferay 将我的自定义 portlet 拖/添加到 liferay 页面?