Virhe tapahtui prosessoidessa esitysmallia.
The following has evaluated to null or missing: ==> serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService") [in template "20095#20123#72916" at line 11, column 34] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>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): - Failed at: #assign assetLinkLocalService = servi... [in template "20095#20123#72916" at line 11, column 1] ----
1<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
2<#assign currentArticle = JournalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) />
3
4<h1>${.vars['reserved-article-title'].data}</h1>
5
6${.vars['reserved-article-description'].data}
7${content.getData()}
8
9
10 <#-- RELATED MATERIAL CONTENT -->
11<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService") />
12<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
13 <#assign currentArticleResourcePrimKey = currentArticle.getResourcePrimKey() />
14 <#assign currentArticleAssetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", currentArticleResourcePrimKey) />
15 <#assign currentArticleAssetEntryId = currentArticleAssetEntry.getEntryId() />
16 <#assign currentArticleRelatedLinks = assetLinkLocalService.getDirectLinks(currentArticleAssetEntryId) />
17
18 <#if currentArticleRelatedLinks?has_content>
19 <#assign relatedLinks = []>
20 <#list currentArticleRelatedLinks as related_entry>
21
22 <#assign relatedAssetEntryId = related_entry.getEntryId2() />
23 <#assign relatedAssetEntry = assetEntryLocalService.getEntry(relatedAssetEntryId) />
24 <#assign relatedAssetEntryPrimKey = relatedAssetEntry.getClassPK() />
25 <#assign relatedArticle = JournalArticleLocalService.getLatestArticle(relatedAssetEntryPrimKey) />
26 <#assign relatedArticleId = relatedArticle.getArticleId() />
27 <#assign docXml = saxReaderUtil.read(relatedArticle.getContent()) />
28 <#assign fileTitle = docXml.valueOf("//dynamic-element[@name='fileName']/dynamic-content/text()") />
29
30 <#assign fileUrl = docXml.valueOf("//dynamic-element[@name='fileUrl']/dynamic-content/text()") />
31
32 <#assign linkObject = {"fileTitle": relatedArticle.getTitleCurrentValue(),"fileUrl": fileUrl } />
33 <#assign relatedLinks += [linkObject] />
34 </#list>
35 </#if>
36
37 <#if relatedLinks?has_content>
38 <h2>Materiaali</h2>
39 <div class="article-list-container">
40 <ul class="article-list list-unstyled">
41 <#list relatedLinks as link>
42 <li>
43 <a href="${link.fileUrl}" target="_blank">
44 <strong>
45 <#if link.fileTitle?? && link.fileTitle?has_content>
46 ${link.fileTitle}
47 <#else>
48 Lataa materiaali
49 </#if>
50 </strong>
51 </a>
52 </li>
53 </#list>
54 </ul>
55 </div>
56 </#if>
57
58<#assign isContent = 0>
59<#list links.getSiblings() as link>
60
61 <#if link.linkTitle?? && link.linkTitle.getData()?has_content>
62 <#assign isContent = 1>
63
64 </#if>
65
66</#list>
67
68 <#if isContent?? && isContent?has_content && isContent == 1>
69 <h2>Linkit</h2>
70 <div class="article-list-container">
71 <ul class="article-list list-unstyled">
72 <#list links.getSiblings() as link>
73 <li>
74 <a href="${link.linkURL.getData()}" target="_blank">
75 <strong>
76 <#if link.linkTitle?? && link.linkTitle.getData()?has_content>
77 ${link.linkTitle.getData()}
78 <#else>
79 Avaa linkki
80 </#if>
81 </strong>
82 </a>
83
84 </li>
85 </#list>
86 </ul>
87 </div>
88</#if>