访问Liferay 7.1 Free标记模板中的页面自定义字段

时间:2019-06-19 08:04:02

标签: liferay freemarker liferay-7.1

我在Liferay 7.1中设置了一个名为CustomLogo的页面自定义字段。我想在“免费标记”模板中访问其值。阅读文档和与之相关的一些帖子后,我使用以下代码访问自定义字段

<#assign page_custom_field_logo_url = layout.getGroup().getExpandoBridge().getAttribute("CustomLogo") />
<h1>${page_custom_field_logo_url }</h1> 

我已经为自定义字段(所有用户角色)设置了查看权限。我还检查了是否在liferay数据库(扩展表)中正确设置了列名和值。 但是我收到以下错误:

FreeMarker template error: Java method "com.liferay.portlet.expando.model.impl.ExpandoBridgeImpl.getAttribute(String)" threw an exception when invoked on com.liferay.portlet.expando.model.impl.ExpandoBridgeImpl object "com.liferay.portlet.expando.model.impl.ExpandoBridgeImpl@f2864c8"; see cause exception in the Java stack trace. FTL stack trace ("~" means nesting-related):
- Failed at: #assign page_custom_field_logo_url...  [in template "/templates/portal_normal.ftl" at line 75, column 37]

观察堆栈跟踪后,我看到有一个空指针异常,指出:

Caused by: java.lang.RuntimeException: java.lang.NullPointerException
at com.liferay.portlet.expando.model.impl.ExpandoBridgeImpl.getAttribute(ExpandoBridgeImpl.java:219)
at com.liferay.portlet.expando.model.impl.ExpandoBridgeImpl.getAttribute(ExpandoBridgeImpl.java:199)
Caused by: java.lang.NullPointerException
at com.liferay.portlet.expando.service.permission.ExpandoColumnPermissionImpl.contains(ExpandoColumnPermissionImpl.java:73)
at com.liferay.expando.kernel.service.permission.ExpandoColumnPermissionUtil.contains(ExpandoColumnPermissionUtil.java:58)
at com.liferay.portlet.expando.service.impl.ExpandoValueServiceImpl.getData(ExpandoValueServiceImpl.java:121)
at sun.reflect.GeneratedMethodAccessor1066.invoke(Unknown Source)

如上所述,我已经为自定义字段设置了查看权限。我还仔细检查了键,错别字和可能的错误,但没有成功。

如果您有任何建议或我错过的事情,请告诉我。谢谢

1 个答案:

答案 0 :(得分:1)

尝试从布局而不是组中获取expando桥,所以

layout.getExpandoBridge().getAttribute("CustomLogo")

应该工作。