Fehler bei der Verarbeitung der Vorlage.
Java method "jdk.proxy154.$Proxy919.getLatestArticle(long)" threw an exception when invoked on jdk.proxy154.$Proxy919 object "com.liferay.journal.service.impl.JournalArticleLocalServiceImpl@60fd04c2"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign jArt = JournalArticleLocalSer... [in template "20116#20152#510999" at line 105, column 13]
----
1<#--
2Application display templates can be used to modify the look of a
3specific application.
4
5Please use the left panel to quickly add commonly used variables.
6Autocomplete is also available and can be invoked by typing "${".
7-->
8
9<#assign DLFileEntryLocalService = serviceLocator.findService(
10"com.liferay.document.library.kernel.service.DLFileEntryLocalService")>
11<#assign DLFolderLocalService = serviceLocator.findService(
12"com.liferay.document.library.kernel.service.DLFolderLocalService")>
13<#assign JournalArticleLocalService = serviceLocator.findService(
14"com.liferay.journal.service.JournalArticleLocalService")>
15<#assign GroupLocalService = serviceLocator.findService(
16"com.liferay.portal.kernel.service.GroupLocalService")>
17<#assign LayoutSetService = serviceLocator.findService(
18"com.liferay.portal.kernel.service.LayoutSetLocalService")>
19<#assign AssetCategoryLocalService = serviceLocator.findService(
20"com.liferay.asset.kernel.service.AssetCategoryLocalService")>
21<#assign AssetVocabularyLocalService = serviceLocator.findService(
22"com.liferay.asset.kernel.service.AssetVocabularyLocalService")>
23<#assign AssetCategoryPropertyLocalService = serviceLocator.findService(
24"com.liferay.asset.category.property.service.AssetCategoryPropertyLocalService")/>
25<#assign PropertyFactoryUtil = serviceLocator.findService(
26"com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil") />
27
28<#assign portletId = themeDisplay.getPortletDisplay().getId()>
29<#assign locale = themeDisplay.getLocale()>
30<#assign PortletPreferencesLocalService = serviceLocator.findService(
31"com.liferay.portal.kernel.service.PortletPreferencesLocalService")/>
32
33<#--
347.4 Upgrade start - portlet perferences would not be stored as xml, see https://github.com/liferay/liferay-portal/blob/master/readme/BREAKING_CHANGES.markdown#what-changed-11
35
36assign portletPreferencesXML = saxReaderUtil.read((PortletPreferencesLocalService.getPortletPreferences(themeDisplay.getPlid(), portletId)?first).getPreferences())
37-->
38
39<#assign plid = themeDisplay.getPlid()>
40
41<#assign portletPreferences = PortletPreferencesLocalService.getPortletPreferences(plid, portletId)?first />
42
43<#assign preferences = PortletPreferencesLocalService.fetchPreferences(portletPreferences.getCompanyId(), portletPreferences.getOwnerId(), portletPreferences.getOwnerType(), plid, portletId) />
44<#assign imageSaturationFilter = themeDisplay.getLayout().getExpandoBridge().getAttribute("Add-Image-Saturation-Filter")!false />
45<#--
467.4 Upgrade end
47-->
48
49<#assign TemplateCustomService = serviceLocator.findService("template.custom.services.TemplateCustomService") />
50
51<#-- Macro used to get specific field text from an Asset Entry -->
52<#macro entryNode document field>
53 <#if document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content")??>
54 "${document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content").getText()?js_string}"
55 <#else>
56 ""
57 </#if>
58</#macro>
59
60<#-- Macro used to get specific portlet preference -->
61
62<#-- 7.4 Upgrade question: where do we need this macro? -->
63
64<#macro preference prefKey prefIndex defaultValue>
65 <#if portletPreferencesXML.selectSingleNode("/portlet-preferences/preference[name='"+prefKey+"-"+prefIndex+"']/value")??>
66 "${portletPreferencesXML.selectSingleNode("/portlet-preferences/preference[name='"+prefKey+"-"+prefIndex+"']/value").getText()?js_string}"<#return>
67 <#else>
68 "${defaultValue?js_string}"<#return>
69 </#if>
70</#macro>
71
72<div id="articleAdtDiv_${portletId}"></div>
73<script>
74 <#if preferences.getValue("useSmallerHeadings", "false")?js_string == "true">
75 <#assign overrideHeadingSize = "heading3 mobile-heading2">
76 </#if>
77
78 <#assign multiArtBehavior = preferences.getValue("multiArticleBehavior", "Vertical Stack")?js_string>
79
80 <#assign fullWidthDisplay = preferences.getValue("fullWidthDisplay", "false")?js_string>
81
82 <#assign featureDisplayType = preferences.getValue("featureDisplayType", "Image Left")?js_string>
83
84 <#assign greyBackground = preferences.getValue("greyBackground", "false")?js_string>
85
86 <#assign extraSpacer = preferences.getValue("extraSpacer", "None")?js_string>
87
88 <#assign autoplay = preferences.getValue("autoPlay", "false")?js_string>
89
90 <#assign seeAllLink = preferences.getValue("seeAllLink", "")?js_string>
91
92 <#assign seeAllLinkText = preferences.getValue("seeAllLinkText", "")?js_string>
93
94 <#assign featureDisplayButtonType = preferences.getValue("featureDisplayButtonType", "Visible")?js_string>
95
96 <#assign featureDisplayButtonText = preferences.getValue("featureDisplayButtonText", "")?js_string>
97
98 <#assign gridTitle = preferences.getValue("gridTitle", "")?js_string>
99
100 var entries = [];
101
102 <#if entries?has_content>
103 <#list entries as curEntry>
104
105 <#assign jArt = JournalArticleLocalService.getLatestArticle(curEntry.getClassPK())>
106 <#assign document = saxReaderUtil.read(jArt.getContentByLocale(themeDisplay.getLocale()))>
107
108 <#assign structureName = jArt.getDDMStructure().getName("en_US")>
109
110
111 var componentType = "FEATURED_ARTICLE";
112 var voiceSearch = "featured-article";
113
114 var title = <@entryNode document=document field="ArticleTitle"/>;
115
116 var subtitle = <@entryNode document=document field="Subtitle"/>;
117
118 var description = <@entryNode document=document field="Description"/>;
119 if (description == ""){
120 description = <@entryNode document=document field="Intro"/>;
121 }
122
123 var slug = <@entryNode document=document field="Slug"/>;
124
125 <#assign articleGroup = GroupLocalService.getGroup(jArt.getGroupId())>
126
127 <#if LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false)??
128 && LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false).getThemeSetting("isMicroSite", "regular")?? >
129 <#assign isMicroSite = (LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false).getThemeSetting("isMicroSite", "regular") == "true")>
130 <#else>
131 <#assign isMicroSite = false>
132 </#if>
133
134 var imageFileEntryId = 0;
135 var imageFileName = "";
136 var image = '${TemplateCustomService.getDocumentFileDetails(document,"ThumbnailSquare",themeDisplay)}';
137 <#-- ATK-1338 Start -->
138 if((${(fullWidthDisplay == "true")?c}) && (!(${multiArtBehavior?matches("Carousel")?c}))) {
139 image = '${TemplateCustomService.getDocumentFileDetails(document,"Thumbnail",themeDisplay)}';
140 }
141 <#-- ATK-1338 Over -->
142 if (null == image || "" == image) {
143 image = '${TemplateCustomService.getDocumentFileDetails(document,"Thumbnail",themeDisplay)}';
144 }
145 if (null == image) {
146 image = "";
147 }
148
149 if ((image) || image != "") {
150 var [imageFileEntryId, restString] = image.split('+++++');
151 var [imageFileName, image] = restString.split('*****');
152 }
153
154 var componentData = {
155 locale: "${locale}",
156 structureName: "${structureName}",
157 displayType: "${featureDisplayType}",
158 slug: slug,
159 title: title,
160 subtitle: subtitle,
161 description: description,
162 image: image.trim(),
163 imageFileEntryId: imageFileEntryId,
164 imageFileName: imageFileName,
165 imageSaturationFilter: "${imageSaturationFilter?c}",
166 groupFriendlyUrl: '${articleGroup.getFriendlyURL()}',
167 isMicrosite: ${isMicroSite?c},
168 multiArtBehavior: '${multiArtBehavior}',
169 featureDisplayButtonText: '${featureDisplayButtonText}',
170 featureDisplayButtonType: '${featureDisplayButtonType}',
171 componentType: componentType,
172 voiceSearch: voiceSearch
173 };
174
175 <#if structureName == "Video">
176
177 componentData.displayType = "Video";
178 componentData.link = <@entryNode document=document field="LinkURL"/>;
179 componentData.videoUrl = <@entryNode document=document field="VideoURL"/>;
180
181 <#elseif structureName == "Article">
182
183 var linkTargetOverride = <@entryNode document=document field="LinkTargetOverride"/>;
184
185 if (linkTargetOverride !== ""){
186 componentData.link = linkTargetOverride;
187 } else {
188 <#assign assetCategories = AssetCategoryLocalService.getCategories(curEntry.getClassNameId(), curEntry.getClassPK())>
189
190 var articleCategories = [];
191
192 <#list assetCategories as category>
193 <#assign categoryVocabulary = AssetVocabularyLocalService.getAssetVocabulary(category.getVocabularyId())>
194 <#assign categoryUrl = "#">
195
196 <#list AssetCategoryPropertyLocalService.getCategoryProperties(category.categoryId) as categoryProperty>
197
198 <#if categoryProperty.key == "url">
199 <#assign categoryUrl = categoryProperty.value>
200 </#if>
201 </#list>
202
203 articleCategories.push({
204 id: "${category.categoryId}",
205 name: "${category.name}",
206 url: "${categoryUrl}",
207 vocabularyName: "${categoryVocabulary.getTitle(locale)}",
208 });
209
210 </#list>
211
212
213 componentData.categories = articleCategories;
214 componentData.urlTitle = "${jArt.getUrlTitle()?js_string}";
215 }
216
217 var byline = <@entryNode document=document field="Byline"/>;
218 if (byline != null && byline != ""){
219 componentData.byline = [];
220 };
221
222 <#elseif structureName == "External Article">
223
224
225
226 <#-- All External Articles should display at /media-center/article, so populate categories accordingly -->
227 <#-- var articleCategories = [];
228 articleCategories.push({
229 id: "0",
230 name: "Media Center",
231 url: "media-center",
232 vocabularyName: "Topics",
233 });
234 articleCategories.push({
235 id: "1",
236 name: "Article",
237 url: "article",
238 vocabularyName: "Article Type",
239 });
240
241 componentData.categories = articleCategories;
242 componentData.urlTitle = "${jArt.getUrlTitle()?js_string}"; -->
243
244 componentData.link = <@entryNode document=document field="LinkURL"/>;
245 componentData.isExternal = true;
246
247 var bylineSegments = [];
248 var pubName = <@entryNode document=document field="PublicationName"/>;
249
250 if (pubName != null && pubName != ""){
251 bylineSegments.push(pubName);
252 componentData.italicizeFirstByline = true;
253 };
254
255 <#--bylineSegments.push(<@entryNode document=document field="PublicationDate"/>); -->
256 componentData.byline = bylineSegments;
257
258 <#elseif structureName == "Link">
259
260 componentData.link = <@entryNode document=document field="LinkURL"/>;
261 componentData.isExternal = true;
262
263 var bylineSegments = [];
264
265 <#assign linkja = JournalArticleLocalService.getLatestArticle(curEntry.getClassPK()) >
266 <#assign linkdocument = saxReaderUtil.read(linkja.getContent())>
267 <#assign linknodes = document.selectNodes("/root/dynamic-element[@name='BylineSegment']/dynamic-content")>
268
269 <#list linknodes as curN>
270 bylineSegments.push("${curN.getText()?js_string}");
271 </#list>
272
273 componentData.byline = bylineSegments;
274 componentData.italicizeFirstByline = true;
275
276 </#if>
277
278 entries.push(componentData);
279 </#list>
280 </#if>
281
282 <#if multiArtBehavior == "Carousel">
283 var carouselProps = {
284 entries: entries,
285 gridTitle: "${gridTitle}",
286 fullWidthDisplay: ${(fullWidthDisplay == "true")?c},
287 greyBackground: "${greyBackground}",
288 autoplay: ${(autoplay == "true")?c}
289 };
290
291 ATK.React.Component.Carousel("articleAdtDiv_${portletId?js_string}", carouselProps);
292 <#else>
293 var componentVoiceSearch = "featured-article";
294 var extraProps = {
295 multiArtBehavior: "${multiArtBehavior}",
296 gridTitle: "${gridTitle}",
297 fullWidthDisplay: "${fullWidthDisplay}",
298 greyBackground: "${greyBackground}",
299 extraSpacer: "${extraSpacer}",
300 seeAllLink: "${seeAllLink}",
301 seeAllLinkText: "${seeAllLinkText}",
302 componentVoiceSearch: componentVoiceSearch
303 };
304 ATK.React.Component.FeaturedMultiDisplay("articleAdtDiv_${portletId?js_string}", extraProps, entries);
305 </#if>
306
307</script>