Search code examples
liferayfreemarkerliferay-7.1

Access page custom field in Liferay 7.1 Free marker template


I have set a page custom field called CustomLogo in Liferay 7.1. I would like to access its value in Free marker template. After reading documentation & some posts related to it, i used following code to access custom field

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

I have set View Permission for the custom field (to all User roles). I have also checked if the column names and values are set properly in the liferay database (expando tables). However i am getting following error:

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]

Upon observing the stack trace , I saw there is a null pointer exception which states:

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)

As i stated above, i already set view permission for the custom field. I also double checked the key, typos and possible mistakes but no success.

Please let me know if you have any suggestions or things i missed out. Thanks


Solution

  • Try to get the expando bridge from the layout instead of the group, so

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

    should work.