Message Boards

How to get related assets in an ADT for asset publisher please?

Lee Jordan, modified 3 Years ago.

How to get related assets in an ADT for asset publisher please?

Expert Posts: 449 Join Date: 5/26/15 Recent Posts
Can't find documentation for how to obtain related assets of a document in an ADT in asset publisher. User wants to relate one document to another, so that each line in the asset publsiher outputs two documents. The main document, then beside it a link to a reference guide PDF. These are documents that allow staff to understand how to read and use the bigger document.

AKA ... My Big Policy Document.DOCX [Guide to document.pdf].

I need this in freemarker please ...https://help.liferay.com/hc/en-us/articles/360017882252-Relating-Assets#showing-related-assets

If it helps an expert help an expert here drag out this code into FTL:
https://github.com/liferay/liferay-portal/blob/master/modules/apps/asset/asset-taglib/src/main/resources/META-INF/resources/asset_links/page.jsp

I can't figure it out, after a week, there's no hope.​​​​​​​
Lee Jordan, modified 3 Years ago.

RE: How to get related assets in an ADT for asset publisher please?

Expert Posts: 449 Join Date: 5/26/15 Recent Posts
How to get this in freemarker?

​​​​​​​List<Tuple> assetLinkEntries = (List<Tuple>)request.getAttribute("liferay-asset:asset-links:assetLinkEntries");

Is there or could there be a getRelated() here ...
https://docs.liferay.com/portal/7.0/javadocs/portal-kernel/com/liferay/asset/kernel/model/AssetEntry.html#getAssetRenderer--

This is impossible???
thumbnail
Christoph Rabel, modified 3 Years ago.

RE: How to get related assets in an ADT for asset publisher please?

Liferay Legend Posts: 1554 Join Date: 9/24/09 Recent Posts
You can either use the taglib:
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;@liferay_asset["asset-links"]
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;assetEntryId=entry.getEntryId()
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;viewInContext=!stringUtil.equals(assetLinkBehavior, "showFullContent")
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/&gt;

or fetch it manually after enabling serviceLocator:
&lt;#assign
assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService")
 assetLinks = assetLinkLocalService.getLinks(assetEntry.getEntryId())
/&gt;
Lee Jordan, modified 3 Years ago.

RE: How to get related assets in an ADT for asset publisher please?

Expert Posts: 449 Join Date: 5/26/15 Recent Posts
Thanks, I copied out this rich_summary.ftl to a new template, none of it works in my template see below error. If enabling service locator does that expose us to remote code vulnerabilities? (note I can't make server configuration changes in production right now to enable service locator  (Restricted Variables) due to covid-19, if we trash our production environment right now, that's not gonna go down well). It's a simple thing that I'm asking of Liferay ... give me the related assets, it should be there already without this hassle.

The taglib won't work for me??

Yeah even if I copy this template it won't work, if I select it in the asset publisher as rich summary it works. Just can't write my own template?

https://github.com/liferay/liferay-portal/blob/master/modules/apps/asset/asset-publisher-web/src/main/resources/com/liferay/asset/publisher/web/portlet/template/dependencies/portlet_display_template_rich_summary.ftl
FreeMarker template error:
The following has evaluated to null or missing:
==&gt; liferay_asset["asset-links"] &nbsp;[in template "20116#20160#379048" at line 50, column 19]
----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use &lt;#if myOptionalVar??&gt;when-present&lt;#else&gt;when-missing<!--#if-->. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??

FTL stack trace ("~" means nesting-related):
&nbsp; &nbsp; &nbsp; &nbsp; - Failed at: @liferay_asset["asset-links"] assetEn... &nbsp;[in template "20116#20160#379048" at line 50, column 17]
----Java stack trace (for programmers):
----
freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...]
&nbsp; &nbsp; &nbsp; &nbsp; at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:131)
&nbsp; &nbsp; &nbsp; &nbsp; at freemarker.core.UnifiedCall.accept(UnifiedCall.java:111)
&nbsp; &nbsp; &nbsp; &nbsp; at freemarker.core.Environment.visitByHiddingParent(Environment.java:345)
&nbsp; &nbsp; &nbsp; &nbsp; at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:48)
&nbsp; &nbsp; &nbsp; &nbsp; at freemarker.core.Environment.visit(Environment.java:324)
&nbsp; &nbsp; &nbsp; &nbsp; at freemarker.core.MixedContent.accept(MixedContent.java:54)
&nbsp; &nbsp; &nbsp; &nbsp; at freemarker.core.Environment.visitByHiddingParent(Environment.java:345)
&nbsp; &nbsp; &nbsp; &nbsp; at freemarker.core.IteratorBlock$IterationContext.executeNestedBlockInner(IteratorBlock.java:268)
&nbsp; &nbsp; &nbsp; &nbsp; at freemarker.core.IteratorBlock$IterationContext.executeNestedBlock(IteratorBlock.java:220)
&nbsp; &nbsp; &nbsp; &nbsp; at freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:194)
&nbsp; &nbsp; &nbsp; &nbsp; at freemarker.core.Environment.visitIteratorBlock(Environment.java:572)
&nbsp; &nbsp; &nbsp; &nbsp; at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:78)
&nbsp; &nbsp; &nbsp; &nbsp; at freemarker.core.IteratorBlock.accept(IteratorBlock.java:64)
&nbsp; &nbsp; &nbsp; &nbsp; at freemarker.core.Environment.visit(Environment.java:324)
&nbsp; &nbsp; &nbsp; &nbsp; at freemarker.core.MixedContent.accept(MixedContent.java:54)
&nbsp; &nbsp; &nbsp; &nbsp; at freemarker.core.Environment.visit(Environment.java:324)
&nbsp; &nbsp; &nbsp; &nbsp; at freemarker.core.Environment.process(Environment.java:302)
&nbsp; &nbsp; &nbsp; &nbsp; at freemarker.template.Template.process(Template.java:325)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.template.freemarker.internal.FreeMarkerTemplate.processTemplate(FreeMarkerTemplate.java:135)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.template.AbstractSingleResourceTemplate.doProcessTemplate(AbstractSingleResourceTemplate.java:67)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.template.AbstractTemplate.write(AbstractTemplate.java:175)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.template.AbstractSingleResourceTemplate.processTemplate(AbstractSingleResourceTemplate.java:90)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.template.RestrictedTemplate.processTemplate(RestrictedTemplate.java:97)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.templateparser.Transformer.mergeTemplate(Transformer.java:241)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.templateparser.Transformer.transform(Transformer.java:144)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portlet.display.template.internal.PortletDisplayTemplateImpl.renderDDMTemplate(PortletDisplayTemplateImpl.java:511)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portlet.display.template.internal.PortletDisplayTemplateImpl.renderDDMTemplate(PortletDisplayTemplateImpl.java:538)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portlet.display.template.PortletDisplayTemplateUtil.renderDDMTemplate(PortletDisplayTemplateUtil.java:150)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.jsp.template_005frenderer.start_jsp._jspService(start_jsp:251)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)
&nbsp; &nbsp; &nbsp; &nbsp; at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377)
&nbsp; &nbsp; &nbsp; &nbsp; at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.osgi.web.servlet.jsp.compiler.JspServlet.service(JspServlet.java:417)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.osgi.web.servlet.jsp.compiler.JspServlet.service(JspServlet.java:428)
&nbsp; &nbsp; &nbsp; &nbsp; at org.eclipse.equinox.http.servlet.internal.registration.EndpointRegistration.service(EndpointRegistration.java:153)
&nbsp; &nbsp; &nbsp; &nbsp; at org.eclipse.equinox.http.servlet.internal.servlet.ResponseStateHandler.processRequest(ResponseStateHandler.java:62)
&nbsp; &nbsp; &nbsp; &nbsp; at org.eclipse.equinox.http.servlet.internal.context.DispatchTargets.doDispatch(DispatchTargets.java:118)
&nbsp; &nbsp; &nbsp; &nbsp; at org.eclipse.equinox.http.servlet.internal.servlet.RequestDispatcherAdaptor.include(RequestDispatcherAdaptor.java:48)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.DirectServletPathRegisterDispatcher.include(DirectServletPathRegisterDispatcher.java:67)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.ClassLoaderRequestDispatcherWrapper.doDispatch(ClassLoaderRequestDispatcherWrapper.java:78)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.ClassLoaderRequestDispatcherWrapper.include(ClassLoaderRequestDispatcherWrapper.java:53)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.taglib.util.IncludeTag.includePage(IncludeTag.java:372)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.taglib.util.IncludeTag.include(IncludeTag.java:349)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.taglib.util.IncludeTag.doInclude(IncludeTag.java:202)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.dynamic.data.mapping.taglib.servlet.taglib.TemplateRendererTag.doStartTag(TemplateRendererTag.java:54)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.jsp.view_jsp._jspService(view_jsp:636)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)
&nbsp; &nbsp; &nbsp; &nbsp; at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377)
&nbsp; &nbsp; &nbsp; &nbsp; at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.osgi.web.servlet.jsp.compiler.JspServlet.service(JspServlet.java:417)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.osgi.web.servlet.jsp.compiler.JspServlet.service(JspServlet.java:428)
&nbsp; &nbsp; &nbsp; &nbsp; at org.eclipse.equinox.http.servlet.internal.registration.EndpointRegistration.service(EndpointRegistration.java:153)
&nbsp; &nbsp; &nbsp; &nbsp; at org.eclipse.equinox.http.servlet.internal.servlet.ResponseStateHandler.processRequest(ResponseStateHandler.java:62)
&nbsp; &nbsp; &nbsp; &nbsp; at org.eclipse.equinox.http.servlet.internal.context.DispatchTargets.doDispatch(DispatchTargets.java:118)
&nbsp; &nbsp; &nbsp; &nbsp; at org.eclipse.equinox.http.servlet.internal.servlet.RequestDispatcherAdaptor.include(RequestDispatcherAdaptor.java:48)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portlet.PortletRequestDispatcherImpl.dispatch(PortletRequestDispatcherImpl.java:282)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portlet.PortletRequestDispatcherImpl.include(PortletRequestDispatcherImpl.java:124)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet.include(MVCPortlet.java:594)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet.include(MVCPortlet.java:610)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet.doView(MVCPortlet.java:160)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.portlet.LiferayPortlet.doDispatch(LiferayPortlet.java:302)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet.doDispatch(MVCPortlet.java:497)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.asset.publisher.web.portlet.AssetPublisherPortlet.doDispatch(AssetPublisherPortlet.java:319)
&nbsp; &nbsp; &nbsp; &nbsp; at javax.portlet.GenericPortlet.render(GenericPortlet.java:262)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet.render(MVCPortlet.java:317)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:103)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portlet.ScriptDataPortletFilter.doFilter(ScriptDataPortletFilter.java:57)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:100)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.asset.publisher.web.internal.portlet.filter.AssetPublisherRenderParametersPortletFilter.doFilter(AssetPublisherRenderParametersPortletFilter.java:71)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:100)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:64)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:108)
&nbsp; &nbsp; &nbsp; &nbsp; at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
&nbsp; &nbsp; &nbsp; &nbsp; at org.eclipse.equinox.http.servlet.internal.registration.EndpointRegistration.service(EndpointRegistration.java:153)
&nbsp; &nbsp; &nbsp; &nbsp; at org.eclipse.equinox.http.servlet.internal.servlet.ResponseStateHandler.processRequest(ResponseStateHandler.java:62)
&nbsp; &nbsp; &nbsp; &nbsp; at org.eclipse.equinox.http.servlet.internal.context.DispatchTargets.doDispatch(DispatchTargets.java:118)
&nbsp; &nbsp; &nbsp; &nbsp; at org.eclipse.equinox.http.servlet.internal.servlet.RequestDispatcherAdaptor.include(RequestDispatcherAdaptor.java:48)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portlet.InvokerPortletImpl.invoke(InvokerPortletImpl.java:535)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portlet.InvokerPortletImpl.invokeRender(InvokerPortletImpl.java:610)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portlet.InvokerPortletImpl.render(InvokerPortletImpl.java:394)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.monitoring.internal.portlet.MonitoringInvokerPortlet.render(MonitoringInvokerPortlet.java:265)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.jsp.html.portal.render_005fportlet_jsp._jspService(render_005fportlet_jsp.java:1586)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
&nbsp; &nbsp; &nbsp; &nbsp; at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.DirectRequestDispatcher.include(DirectRequestDispatcher.java:64)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.ClassLoaderRequestDispatcherWrapper.doDispatch(ClassLoaderRequestDispatcherWrapper.java:78)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.ClassLoaderRequestDispatcherWrapper.include(ClassLoaderRequestDispatcherWrapper.java:53)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.TransferHeadersHelperImpl$TransferHeadersRequestDispatcher.include(TransferHeadersHelperImpl.java:162)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portlet.PortletContainerImpl._render(PortletContainerImpl.java:780)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portlet.PortletContainerImpl.lambda$render$2(PortletContainerImpl.java:195)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portlet.PortletContainerImpl._preserveGroupIds(PortletContainerImpl.java:350)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portlet.PortletContainerImpl.render(PortletContainerImpl.java:184)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portlet.SecurityPortletContainerWrapper.render(SecurityPortletContainerWrapper.java:141)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portlet.RestrictPortletContainerWrapper.render(RestrictPortletContainerWrapper.java:141)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.portlet.PortletContainerUtil.render(PortletContainerUtil.java:172)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.layoutconfiguration.util.PortletRenderer._render(PortletRenderer.java:129)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.layoutconfiguration.util.PortletRenderer.render(PortletRenderer.java:76)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.layoutconfiguration.util.RuntimePageImpl.doProcessTemplate(RuntimePageImpl.java:499)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.layoutconfiguration.util.RuntimePageImpl.doDispatch(RuntimePageImpl.java:340)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.layoutconfiguration.util.RuntimePageImpl.processTemplate(RuntimePageImpl.java:155)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.layoutconfiguration.util.RuntimePageImpl.processTemplate(RuntimePageImpl.java:176)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.layoutconfiguration.util.RuntimePageUtil.processTemplate(RuntimePageUtil.java:97)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.jsp.html.portal.layout.view.portlet_jsp._jspService(portlet_jsp.java:765)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
&nbsp; &nbsp; &nbsp; &nbsp; at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.DirectRequestDispatcher.include(DirectRequestDispatcher.java:64)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.ClassLoaderRequestDispatcherWrapper.doDispatch(ClassLoaderRequestDispatcherWrapper.java:78)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.ClassLoaderRequestDispatcherWrapper.include(ClassLoaderRequestDispatcherWrapper.java:53)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.TransferHeadersHelperImpl$TransferHeadersRequestDispatcher.include(TransferHeadersHelperImpl.java:162)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.model.impl.LayoutTypeControllerImpl.includeLayoutContent(LayoutTypeControllerImpl.java:171)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.model.impl.LayoutImpl.includeLayoutContent(LayoutImpl.java:897)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.action.LayoutAction.processLayout(LayoutAction.java:323)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.action.LayoutAction.execute(LayoutAction.java:159)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.struts.PortalRequestProcessor.process(PortalRequestProcessor.java:170)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
&nbsp; &nbsp; &nbsp; &nbsp; at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.MainServlet.callParentService(MainServlet.java:608)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.MainServlet.service(MainServlet.java:585)
&nbsp; &nbsp; &nbsp; &nbsp; at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:119)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:144)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.filters.uploadservletrequest.UploadServletRequestFilter.processFilter(UploadServletRequestFilter.java:93)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:49)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:144)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.filters.secure.BaseAuthFilter.processFilter(BaseAuthFilter.java:340)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:49)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:144)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.filters.jsoncontenttype.JSONContentTypeFilter.processFilter(JSONContentTypeFilter.java:42)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:49)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:144)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.monitoring.internal.servlet.filter.MonitoringFilter.processFilter(MonitoringFilter.java:181)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:49)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:101)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:720)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:466)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:391)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:318)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.FriendlyURLServlet.service(FriendlyURLServlet.java:154)
&nbsp; &nbsp; &nbsp; &nbsp; at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:119)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:144)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.frontend.compatibility.ie.servlet.filter.IEMimeTypeCompatibilityFilter.processFilter(IEMimeTypeCompatibilityFilter.java:48)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:49)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:144)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.filters.uploadservletrequest.UploadServletRequestFilter.processFilter(UploadServletRequestFilter.java:93)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:49)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:144)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.filters.strip.StripFilter.processFilter(StripFilter.java:344)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:49)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:144)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.filters.i18n.I18nFilter.processFilter(I18nFilter.java:368)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:49)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:144)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.filters.secure.BaseAuthFilter.processFilter(BaseAuthFilter.java:340)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:49)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:144)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.filters.jsoncontenttype.JSONContentTypeFilter.processFilter(JSONContentTypeFilter.java:42)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:49)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:144)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.filters.autologin.AutoLoginFilter.processFilter(AutoLoginFilter.java:261)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:49)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:144)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.sharepoint.SharepointFilter.processFilter(SharepointFilter.java:88)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:49)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:144)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.filters.virtualhost.VirtualHostFilter.processFilter(VirtualHostFilter.java:263)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:49)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:144)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.monitoring.internal.servlet.filter.MonitoringFilter.processFilter(MonitoringFilter.java:181)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:49)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:188)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:188)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
&nbsp; &nbsp; &nbsp; &nbsp; at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
&nbsp; &nbsp; &nbsp; &nbsp; at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
&nbsp; &nbsp; &nbsp; &nbsp; at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
&nbsp; &nbsp; &nbsp; &nbsp; at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.servlet.filters.urlrewrite.UrlRewriteFilter.processFilter(UrlRewriteFilter.java:65)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:49)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:168)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:168)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:188)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
&nbsp; &nbsp; &nbsp; &nbsp; at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:101)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
&nbsp; &nbsp; &nbsp; &nbsp; at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
&nbsp; &nbsp; &nbsp; &nbsp; at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
&nbsp; &nbsp; &nbsp; &nbsp; at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
&nbsp; &nbsp; &nbsp; &nbsp; at java.lang.Thread.run(Thread.java:745)
Lee Jordan, modified 3 Years ago.

RE: How to get related assets in an ADT for asset publisher please?

Expert Posts: 449 Join Date: 5/26/15 Recent Posts
Does this .... <@liferay_asset["asset-links"] ... need service locator to be on? Scratch that ... that didn't work. What would be stopping tag libs working in an ADT. The service locator approach kinda works on my local (though it's an array) but as mentioned we cannot make risk based changes to production at this time. If I can get the tag lib working that would be great.

I get the error when printing assetLinks:
For "${...}" content: Expected a string or something automatically convertible to string (number, date or boolean), but this has evaluated to a sequence (ArrayList wrapped into f.t.DefaultListAdapter):
==&gt; assetLinks  [in template "20116#20160#379048" at line 45, column 15]
What would come after ...
&lt;#assign
assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService")
assetLinks = assetLinkLocalService.getLinks(entry.getEntryId())
/&gt;


I get the array output as:


{linkId=379041, companyId=20116, userId=31086, userName=Lee Jordan, createDate=Mon May 18 15:26:54 GMT 2020, entryId1=379015, entryId2=379025, type=0, weight=0} {linkId=379042, companyId=20116, userId=31086, userName=Lee Jordan, createDate=Mon May 18 15:26:54 GMT 2020, entryId1=379025, entryId2=379015, type=0, weight=0}


What I need is a UL list of LI's containing the document name, which is hyperlinked to it's find file entry URL.


Liferay staffers reading ... is there litterally any documenation please?
thumbnail
Christoph Rabel, modified 3 Years ago.

RE: How to get related assets in an ADT for asset publisher please?

Liferay Legend Posts: 1554 Join Date: 9/24/09 Recent Posts
No, it doesn't. But I guess, something is missing. One of the variables entry, stringUtil or assetLinkBehavior might not be available. Let me simplify:
      
 &lt;@liferay_asset["asset-links"]
 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;assetEntryId=entry.getEntryId()
 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;viewInContext=true
&nbsp;/&gt;
Now just entry might not be there. You need to put these tag into the entries loop.
If it still doesn't work, please you do the following:
Create a new Asset Publisher and change the filter so that some entries with related assets are shown. Now go to "Display Settings" and select "Rich Summary" in the Display Template dropdown. Also, enable the checkbox "Related Assets".
If it works there, look in the Rich Summary ADT, the tag is used there.
---
Enabling serviceLocator does not expose you to remote code vulnerabilities. But it allows people who can edit/create ADTs to be able to do about anything since the can call most services from freemarker afterwards. So, you need to trust editors, who have write access to ADTs more.
---
And I agree, it is really annoying that it is sooo hard to access an asset and its metadata like categories, related assets, ...
Lee Jordan, modified 3 Years ago.

RE: How to get related assets in an ADT for asset publisher please?

Expert Posts: 449 Join Date: 5/26/15 Recent Posts
I appreciate the help by the way, it's just so frustrating. I can't ask for production to be reconfigured and rebooted and to give access to restricted variables to do something as simple as get a list of attachments.Doing the above brings ...

The following has evaluated to null or missing:
==&gt; liferay_asset["asset-links"]  [in template "20116#20160#379048" at line 40, column 14]


But if I do it with service locator I do get asset ID's in the list as ... "entryId1". Now I would need to get the asset title and asset URL from that entryId1 number and look it up that way.

&lt;#list assetLinks as item&gt;
${item}
<!--#list-->


In context if I can't get it working by the end of the day, then I've spent too much time on it, can't give any more time to it and I'll have to chalk it up as not being possible at this time and move on to the next thing on my list. Such is life.
Lee Jordan, modified 3 Years ago.

RE: How to get related assets in an ADT for asset publisher please?

Expert Posts: 449 Join Date: 5/26/15 Recent Posts
Solution: Goodness me! 8 Hours!


&lt;#list entries as entry&gt;
&nbsp;&nbsp; &nbsp;&lt;#assign
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;entry = entry
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;assetRenderer = entry.getAssetRenderer()
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale))
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry)
&nbsp;&nbsp; &nbsp;/&gt;
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;#if !stringUtil.equals(assetLinkBehavior, "showFullContent")&gt;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry, true) /&gt;
&nbsp;&nbsp; &nbsp;<!--#if-->&nbsp;&nbsp; &nbsp;
​​​​​​​&nbsp;        <div class="asset-abstract">
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<h3 class="asset-title">
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<a href="${viewURL}">
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;${entryTitle}
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;</a>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;</h3>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<div class="asset-content">
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;#assign
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService")
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; assetLinks = assetLinkLocalService.getDirectLinks(entry.getEntryId())
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AssetEntryService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryService")
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <ul>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;#list assetLinks as item&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                &lt;#assign &nbsp; &nbsp;assetRelated = AssetEntryService.fetchEntry(item.entryId2)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; assetRelatedTitle = assetRelated.title
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; assetRelatedLink = "/c/document_library/get_file?uuid=" + assetRelated.classUuid
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <li><a href="${assetRelatedLink}">${assetRelatedTitle}</a></li>
&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <!--#list-->
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </ul>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;</div>
&nbsp;&nbsp; &nbsp;</div>
<!--#list-->