حصل خطأ عند معالجة القالب.
Java method "static com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil.getAssetCategory(long)" couldn't be called: The value of the 1st argument was null, but the target Java parameter type (long) is primitive and so can't store null.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign category = assetCategoryLocal... [in template "15553970#15554109#17210299" at line 31, column 1]
----
1<#-- OBTENER CONTENIDOS CON LA CATEGORIA PASADA -->
2
3
4
5<#assign listCategoriesFilter = []>
6<#if request.getParameter("categoryId")??>
7 <#assign listCategoriesFilter = [request.getParameter("categoryId")?number]>
8</#if>
9<#assign pageNumber = 1>
10<#if request.getParameter("page")??>
11 <#assign pageNumber = request.getParameter("page")?number>
12</#if>
13
14<#assign delta = portletPreferences["delta"][0]?number>
15<#assign end = pageNumber * delta>
16<#assign start = end - delta>
17
18<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
19<#assign ddmStructureService = serviceLocator.findService("com.liferay.dynamic.data.mapping.service.DDMStructureLocalService") />
20<#assign assetEntryQueryService = objectUtil('com.liferay.asset.kernel.service.AssetEntryLocalServiceUtil')>
21<#assign assetEntryQuery = objectUtil('com.liferay.asset.kernel.service.persistence.AssetEntryQuery')>
22<#assign search = assetEntryQuery.setAllCategoryIds(listCategoriesFilter)>
23<#assign searchStart = assetEntryQuery.setStart(start)>
24<#assign searchEnd = assetEntryQuery.setEnd(end)>
25<#assign listEntries = assetEntryQueryService.getEntries(assetEntryQuery)>
26<#assign listEntriesSize = 0>
27
28<#assign assetCategoryLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil"]/>
29<#assign assetCategoryPropertyLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetCategoryPropertyLocalServiceUtil"]/>
30<#assign assetVocabularyLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetVocabularyLocalServiceUtil"]/>
31<#assign category = assetCategoryLocalServiceUtil.getAssetCategory(listCategoriesFilter[0])/>
32<#assign titleCategory = category.getName() />
33<#assign vocabulary = assetVocabularyLocalServiceUtil.getAssetVocabulary(category.vocabularyId) />
34
35<#attempt>
36 <#assign cat = assetCategoryPropertyLocalServiceUtil.getCategoryProperties(category.categoryId)/>
37 <#assign headerImg = "">
38 <#if categories ??>
39 <#list cat as category>
40 <#if category.key == "image">
41 <#assign categoryImg = assetCategoryPropertyLocalServiceUtil.getCategoryProperty(category.getCategoryId(),"image")/>
42 <#assign headerImg = categoryImg.getValue()?replace('_', '/')>
43 </#if>
44 </#list>
45 </#if>
46
47<#recover>
48 <#assign headerImg = "">
49</#attempt>
50
51<#attempt>
52 <#if vocabulary.name?contains("Centro")>
53 <div class="tituloCategoria">
54 PUBLICACIONES DEL ${titleCategory}
55 </div>
56 <#else>
57 <div class="tituloCategoria">
58 PUBLICACIONES DE ${titleCategory}
59 </div>
60 </#if>
61<#recover>
62</#attempt>
63
64<#assign counter = 0>
65
66<#assign urlBase = "" />
67<#assign urlFriendly = themeDisplay.getLayout().getFriendlyURL() />
68<#assign urlCurrent = themeDisplay.getURLCurrent() />
69<#if urlCurrent?contains(urlFriendly)>
70 <#assign urlBase = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()?keep_before_last("/")?remove_ending("/") />
71<#else>
72 <#assign urlBase = themeDisplay.getPortalURL() +themeDisplay.getURLCurrent()?remove_ending("/") />
73</#if>
74
75
76<div class="row">
77
78 <#list listEntries as curEntry>
79 <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, curEntry, true) />
80
81 <#assign renderer = curEntry.getAssetRenderer()>
82 <#assign className = renderer.getClassName()>
83
84 <#if className == "com.liferay.journal.model.JournalArticle">
85 <#assign journalArticle = renderer.getArticle()>
86 <#assign jaResourcePrimKey = journalArticle.getResourcePrimKey()>
87 <#assign reproducciones = journalArticle.getExpandoBridge().getAttribute('reproducciones')>
88 <#assign document = saxReaderUtil.read(journalArticle.getContent())>
89 <#assign rootElement = document.getRootElement()>
90 <#assign defaultLanguageId = parseXml ("@default-locale", rootElement)>
91 <#assign jArticleDDMStructureKey = journalArticle.getDDMStructureKey()>
92
93 <#assign ddmStructureLocalService = serviceLocator.findService("com.liferay.dynamic.data.mapping.service.DDMStructureLocalService") />
94 <#assign structures = ddmStructureLocalService.getStructures(themeDisplay.getScopeGroupId()) />
95 <#assign centroStructureKey = "" />
96 <#list structures as structure>
97 <#if structure.getName(locale) == "Radio">
98 <#assign radioStructureKey = structure.getStructureKey() />
99 </#if>
100 </#list>
101 <#if jArticleDDMStructureKey == radioStructureKey>
102 <#assign listEntriesSize = listEntriesSize + 1>
103 <#assign title = getField("Título", locale, defaultLanguageId, rootElement)!>
104
105 <#-- CAMPOS DE RADIO -->
106 <#assign resume = getField("Resumen", locale, defaultLanguageId, rootElement)!>
107 <#attempt>
108 <#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@name='imagen']")>
109 <#if xPathSelector.selectSingleNode(rootElement)??>
110 <#assign img = xPathSelector.selectSingleNode(rootElement).getStringValue()>
111 <#if isJson(img)>
112 <#assign imgJson = jsonFactoryUtil.createJSONObject(img)>
113 <#assign imgUrl = "/documents/" + imgJson.groupId + "/" + imgJson.uuid >
114 </#if>
115 </#if>
116 <#recover>
117 <#assign imgUrl = "">
118 </#attempt>
119
120 <#-- CAMPOS DE CENTRO -->
121 <#assign enlace = getField("Enlace", locale, defaultLanguageId, rootElement)!>
122 <#attempt>
123 <#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@name='Logo']")>
124 <#assign logoUrl = "">
125 <#if xPathSelector.selectSingleNode(rootElement)??>
126 <#assign logo = xPathSelector.selectSingleNode(rootElement).getStringValue()>
127
128 <#if isJson(logo)>
129 <#assign logoJson = jsonFactoryUtil.createJSONObject(logo)>
130 <#assign logoUrl = "/documents/" + logoJson.groupId + "/" + logoJson.uuid >
131 </#if>
132 </#if>
133 <#recover>
134 <#assign logoUrl = "">
135 </#attempt>
136
137
138 <#if counter = 0 && headerImg == "">
139 <#if imgUrl != "">
140 <#assign headerImg = imgUrl>
141 <#elseif logoUrl != "">
142 <#assign headerImg = logoUrl>
143 </#if>
144 </#if>
145
146 <#attempt>
147 <#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@name='ArchivoDeAudioVideo']")>
148 <#assign audioVideoUrl = "">
149 <#if xPathSelector.selectSingleNode(rootElement)??>
150 <#assign audioVideo = xPathSelector.selectSingleNode(rootElement).getStringValue()>
151 <#if isJson(audioVideo)>
152 <#assign audioVideoJson = jsonFactoryUtil.createJSONObject(audioVideo)>
153 <#assign audioVideoUrl = "/documents/" + audioVideoJson.groupId + "/" + audioVideoJson.uuid >
154 </#if>
155 </#if>
156 <#recover>
157 <#assign audioVideoUrl = "">
158 </#attempt>
159
160 <#-- OBTIENE LAS CATEGORIAS -->
161 <#assign assetCategoryLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil"]/>
162 <#assign categoryList = assetCategoryLocalServiceUtil.getCategories(className , journalArticle.resourcePrimKey) >
163
164 <div class="col-xs-12 col-sm-6 col-md-4">
165 <div class="latest-publications-card publications-card publications-category">
166 <div class="latest-publications-header">
167 <div class="header-img">
168 <#if imgUrl != "">
169 <img loading="lazy" decoding="async" src="${imgUrl}" width="370" height="290" alt="Serie image">
170 <#elseif logoUrl != "">
171 <img loading="lazy" decoding="async" src="${logoUrl}" width="370" height="290" alt="Serie image">
172 </#if>
173 </div>
174 <#if audioVideoUrl != "">
175 <div class="header-content">
176 <div class="actions-cont">
177 <div class="actions">
178 <a class="jPlayerPlay" url="${audioVideoUrl}" title="${title}" id="${jaResourcePrimKey}" counter="${reproducciones}">
179 <i class="play icon-play"></i>
180 </a>
181 </div>
182 </div>
183 </div>
184 </#if>
185 </div>
186 <div class="latest-publications-content">
187 <h5 class="title"><a href="${viewURL}">${title}</a></h5>
188 <p class="meta">
189 <span class="date">
190 <#setting locale="es_ES">
191 ${journalArticle.getDisplayDate()?date?string["d MMMM'.' yyyy"]}
192 </span>
193 </p>
194 <#if resume != "">
195 <div class="content-resume small">
196 <p>${resume}</p>
197 </div>
198 </#if>
199 <p class="read-more small">
200 <a href="${viewURL}" class="button-detail">
201 Leer más... <i class="icon-long-arrow-right"></i>
202 </a>
203 </p>
204 <p class="tags">
205 <#list categoryList as category>
206 <a href="${urlBase + '/publicaciones-categoría?categoryId=' + category.getCategoryId() + '&page=1'}" class="view_category">
207 <i class="icon-tag"></i> ${category.getName()}
208 </a>
209 </#list>
210 </p>
211
212
213
214 </div>
215 </div>
216 </div>
217 </#if>
218 </#if>
219 <#assign counter = counter + 1>
220
221 </#list>
222
223<#assign totalPages = (listEntriesSize/delta)?int>
224
225<#if listEntriesSize%delta != 0>
226 <#assign totalPages = totalPages + 1>
227</#if>
228
229
230</div>
231<div class="row">
232 <div class="col-md-12">
233 <div class="pagination-educastur-radio">
234 <#list 1..totalPages as index>
235 <#if index == 1 && index != pageNumber >
236 <a class="prev page-numbers" href="${'/web/guest/publicaciones-categoría?categoryId=' + category.getCategoryId() + '&page=' + (pageNumber - 1) }">
237 <span class="icon-l">
238 <i class="icon-angle-left"></i>
239 Anterior
240 </span>
241 </a>
242 <a class="page-numbers current" href="${'/web/guest/publicaciones-categoría?categoryId=' + category.getCategoryId() + '&page=' + index }">
243 <span class="num">${index}</span>
244 </a>
245 <#elseif index == totalPages && index != pageNumber>
246 <a class="page-numbers current" href="${'/web/guest/publicaciones-categoría?categoryId=' + category.getCategoryId() + '&page=' + index }">
247 <span class="num">${index}</span>
248 </a>
249 <a class="next page-numbers" href="${'/web/guest/publicaciones-categoría?categoryId=' + category.getCategoryId() + '&page=' + (pageNumber + 1) }">
250 <span class="icon-r">
251 Siguiente
252 <i class="icon-angle-right"></i>
253 </span>
254 </a>
255 <#elseif index == pageNumber>
256 <span class="page-numbers current">
257 <span class="num">${index}</span>
258 </span>
259 <#elseif index gte (pageNumber - 2) && index lte (pageNumber + 2) >
260 <#if index == (pageNumber - 2)>
261 <span class="page-numbers dots">...</span>
262 </#if>
263 <a class="page-numbers current" href="${'/web/guest/publicaciones-categoría?categoryId=' + category.getCategoryId() + '&page=' + index }">
264 <span class="num">${index}</span>
265 </a>
266 <#if index == (pageNumber + 2)>
267 <span class="page-numbers dots">...</span>
268 </#if>
269 </#if>
270 </#list>
271 </div>
272 </div>
273</div>
274
275
276
277<#function getField field languageId defaultLanguageId xml>
278 <#local defaultSelector = "//dynamic-content[@language-id='" + defaultLanguageId + "' and ancestor-or-self::*[@name='" + field + "']]">
279 <#local localeSelector = "//dynamic-content[@language-id='" + languageId + "' and parent::*[@name='" + field + "']]">
280
281 <#local selector = saxReaderUtil.createXPath(localeSelector)>
282 <#local value = selector.selectSingleNode(xml)!>
283
284 <#if value?has_content && value.getText()?has_content>
285 <#return value.getText()>
286 </#if>
287
288 <#local selector = saxReaderUtil.createXPath(defaultSelector)>
289 <#local value = selector.selectSingleNode(xml)!>
290
291 <#if value?has_content && value.getText()?has_content>
292 <#return value.getText()>
293 </#if>
294
295 <#return "">
296</#function>
297
298<#function parseXml xpath xml>
299 <#local selector = saxReaderUtil.createXPath(xpath)>
300 <#local result = selector.selectSingleNode(xml)!>
301
302 <#if result?has_content>
303 <#return result.getStringValue()>
304 </#if>
305
306 <#return "">
307</#function>
308
309<#function isJson json>
310 <#local value = json?trim>
311 <#return value?has_content && value?starts_with("{") && value?ends_with("}")>
312</#function>
313
314<script>
315 $(".js_title").html("${titleCategory}");
316 $(".js_counter_elements").html(${listEntriesSize} + " resultados / página " + ${pageNumber} + " de " + ${totalPages});
317 $(".js_img").attr("src","${headerImg}");
318</script>
