Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
Java method "com.sun.proxy.$Proxy171.getCategory(long)" threw an exception when invoked on com.sun.proxy.$Proxy171 object "com.swt.portal.servicewrappers.AssetCategoryServiceOverride@2ad48c1d"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: category = AssetCategoryService.getCa...  [in template "20115#20151#306336" at line 229, column 17]
	- Reached through: #assign-container  [in template "20115#20151#306336" at line 227, column 9]
----
1<style scope> 
2    .taglib-categorization-filter{ 
3    display:none 
4
5 
6    .article-container{ 
7        height: 350px; 
8
9    .article-container img{ 
10        height: 150px; 
11        width: 100%; 
12        object-fit: cover; 
13
14 
15    .article-title{ 
16        color: #0b5090; 
17        text-decoration: none !important; 
18        font-weight: bold; 
19        padding: 0; 
20        font-weight: bold; 
21        font-size: 16px; 
22        margin: 10px 0; 
23
24     
25    .article-description{ 
26        text-align: justify; 
27
28    .article-description b{ 
29        margin-right: 5px; 
30
31    .article-container{ 
32        padding: 0; 
33        margin-bottom: 15px; 
34
35    .article-title a{ 
36        color: #0b5090; 
37
38    .category-cover img{ 
39        width: 100%; 
40        max-height: 500px; 
41        object-fit: cover; 
42
43    .list-container{ 
44        font-size: 14px; 
45
46    .publish-date{ 
47        font-weight: bold; 
48        color: grey; 
49
50    .cms-title-category a{ 
51        color: #d70000; 
52        font-weight: bold; 
53
54    .title-category-container{ 
55        padding: 12px 0px 10px 12px; 
56        border-bottom: 1px dotted #CBCBCB; 
57        margin-bottom: 10px; 
58        background: linear-gradient(#e9e9e9, #fbfbfb); 
59
60    .search-date{ 
61        padding: 0; 
62		float: left; 
63		margin: 0 0 8px -10px; 
64		display: flex; 
65
66    .search-lable{ 
67        text-align: right; 
68        padding: 8px; 
69        font-weight: bold; 
70
71    .search-input{ 
72        padding: 4px 1px 5px 5px; 
73
74	#dateSearch { 
75		height: 24px; 
76		border: 1px solid #C8C9CA; 
77		border-radius: 4px; 
78		background: #fff; 
79		width: 133px; 
80
81	.btn-primary { 
82		background-color: #337ab7; 
83		height: 24px; 
84		position: relative; 
85		top: 4px; 
86		width: 56px; 
87		left: 43px; 
88		border: 1px solid; 
89		border-color: #C8C9CA #9E9E9E #9E9E9E #C8C9CA; 
90		background: linear-gradient(#ffffff, #f2f2f2, #dedede, #d9d9d9); 
91		Font-size: 12px; 
92		font-weight: bold; 
93		color: #2c6c97; 
94		padding: 3px; 
95
96	.taglib-page-iterator { 
97		padding: 0 15px; 
98
99	.lfr-icon-menu-text, .search-results, .lfr-pagination-buttons{ 
100		font-size: 12px; 
101
102		.btn:hover { 
103		border: 1px solid #204d74; 
104
105	.btn-primary:active:hover{ 
106		color: #2c6c97; 
107		border: 1px solid; 
108		border-color: #C8C9CA #9E9E9E #9E9E9E #C8C9CA; 
109
110	.taglib-page-iterator{ 
111		padding: 0 15px; 
112
113	.taglib-page-iterator .search-results, .lfr-pagination-buttons, .lfr-icon-menu-text{ 
114		font-size: 12px; 
115
116	 
117	.search-results, .lfr-pagination-delta-selector{ 
118		display: none !important; 
119
120	 
121	.clearfix{ 
122		display: flex; 
123
124	 
125	.lfr-pagination-buttons{ 
126		margin: 10px 0 0 auto !important; 
127
128	 
129	.portlet-title{ 
130	    width: 100%; 
131        font-size: 20px; 
132        margin: 10px 0px; 
133        padding: 10px 0px; 
134        border-bottom: 1px solid #333D71; 
135        text-transform: uppercase; 
136        font-weight: bold; 
137        color: #CA1A1A; 
138
139	.portlet-title-category{ 
140	    width: 100%; 
141	    text-align: center; 
142        font-size: 20px; 
143        margin: 10px 0px; 
144        padding: 10px 0px; 
145        text-transform: uppercase; 
146        font-weight: bold; 
147        color: #000; 
148        border-bottom: 1px solid #d00; 
149
150	 
151	@media only screen and (max-width: 767px){ 
152		.list-container { 
153			padding: 6px; 
154
155		.article-container { 
156			margin-top: 0; 
157			border-bottom: 1px dashed #cbcbcb; 
158
159		.search-button{ 
160			padding: 0; 
161
162		.search-button .btn-primary{ 
163			left: 0; 
164
165		.search-lable { 
166			text-align: left; 
167			padding: 8px 0 0 6px; 
168
169		.search-date{ 
170			margin: 0; 
171
172		.taglib-page-iterator{ 
173			padding: 0 6px; 
174
175		.taglib-page-iterator .lfr-pagination-buttons{ 
176			display: flex; 
177
178		.taglib-page-iterator .lfr-pagination-buttons>li>a{ 
179			width: 99%; 
180			border-radius: 4px; 
181
182		.taglib-page-iterator .lfr-pagination-config .current-page-menu .btn{ 
183			margin: 0 0 5px 0; 
184
185		.search-results{ 
186			display: none !important; 
187			line-height: 35px !important; 
188			color: #9e9e9e; 
189
190 
191		.clearfix{ 
192	    	display: unset; 
193
194
195	.form-control:focus { 
196    box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 8px rgb(255, 255, 255); 
197 
198
199</style> 
200 
201<#assign enableButtonEditArticle = "false" />	 
202<#list portletPreferences?keys as preference> 
203	<#-- Check if button edit is enabled. --> 
204		<#if preference == "enableButtonEdit" > 
205			<#list portletPreferences[preference] as value> 
206				<#assign enableButtonEditArticle = value /> 
207				<#break> 
208			</#list> 
209		</#if>		 
210</#list> 
211 
212<#--firstCategoryId là gia trị được truyền từ template Danh sách tin tuc , và nó dùng làm chuyên mục chính--> 
213 
214<#assign firstCategoryId = paramUtil.getString(renderRequest, "categoryId") /> 
215<#assign httpRequest = portalUtil.getOriginalServletRequest(portalUtil.getHttpServletRequest(renderRequest))> 
216<#assign AssetCategoryService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryService")> 
217<#assign AssetCategoryPropertyLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetCategoryPropertyLocalServiceUtil"]/> 
218<#assign DLFileEntryLocalServiceUtil =  serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")/> 
219 
220<#assign dateSearch = getterUtil.getString(httpRequest.getParameter("p_r_p_date")) 
221		idCategory = "" 
222		nameCategory = "Điểm đến du lịch" 
223		url = "" 
224/> 
225 
226<#if (firstCategoryId != "")> 
227	<#assign 
228		idCategory = firstCategoryId 
229		category = AssetCategoryService.getCategory(idCategory?number) 
230		nameCategory = category.getName() 
231	/> 
232	<#assign categoryPropertyList = AssetCategoryPropertyLocalServiceUtil.getCategoryProperties(idCategory?number)/> 
233	 
234	<#if categoryPropertyList?has_content> 
235		<#list categoryPropertyList as categoryProperty> 
236			<#if (categoryProperty.getKey() == "icon")> 
237				<#assign idDLEntry = categoryProperty.getValue()/> 
238				<#if (idDLEntry?number > 0)> 
239					<#assign fileEntry = DLFileEntryLocalServiceUtil.getDLFileEntry(idDLEntry?number) /> 
240					<#assign fileNameUrl = fileEntry.getTitle()/> 
241					<#assign folderId = fileEntry.getFolderId()/> 
242					<#assign url = themeDisplay.getPortalURL() + themeDisplay.getPathContext() + "/documents/" + themeDisplay.getScopeGroupId() + "/" + folderId + "/" + fileNameUrl /> 
243					 
244				</#if> 
245			</#if> 
246		</#list> 
247	</#if> 
248<#else> 
249    <#assign idCategory = getterUtil.getString(httpRequest.getParameter("p_r_p_categoryId"))> 
250    <#if (idCategory?length > 0) > 
251        <#assign 
252            category = AssetCategoryService.getCategory(idCategory?number) 
253		    nameCategory = category.getName() 
254		/> 
255    	<#assign categoryPropertyList = AssetCategoryPropertyLocalServiceUtil.getCategoryProperties(idCategory?number)/> 
256    	 
257    	<#if categoryPropertyList?has_content> 
258    		<#list categoryPropertyList as categoryProperty> 
259    			<#if (categoryProperty.getKey() == "icon")> 
260    				<#assign idDLEntry = categoryProperty.getValue()/> 
261    				<#if (idDLEntry?number > 0)> 
262    					<#assign fileEntry = DLFileEntryLocalServiceUtil.getDLFileEntry(idDLEntry?number) /> 
263    					<#assign fileNameUrl = fileEntry.getTitle()/> 
264    					<#assign folderId = fileEntry.getFolderId()/> 
265    					<#assign url = themeDisplay.getPortalURL() + themeDisplay.getPathContext() + "/documents/" + themeDisplay.getScopeGroupId() + "/" + folderId + "/" + fileNameUrl /> 
266    					 
267    				</#if> 
268    			</#if> 
269    		</#list> 
270    	</#if> 
271    	 
272    </#if> 
273</#if> 
274<div class="list-header"> 
275<#if (url?length>0) > 
276<div class="category-cover"> 
277	<img src="${url}" /> 
278</div> 
279<h2 class="portlet-title-category">${nameCategory}</h2> 
280<#else> 
281<h2 class="portlet-title ${url}">${nameCategory}</h2> 
282</#if> 
283</div> 
284 
285<div class="row list-container"> 
286    <#if entries?has_content> 
287        <#if validator.isNull(dateSearch)> 
288            <#assign listToShow = entries > 
289        <#else> 
290			<#assign dateSearch = htmlUtil.escape(dateSearch) /> 
291            <#assign listToShow = [] > 
292            <#list entries?chunk(1) as i> 
293                <#assign dateSearch_DateObj = dateUtil.parseDate("dd/MM/yyyy", dateSearch, locale) /> 
294	            <#assign curEntryDate = i?first.getPublishDate() /> 
295	            <#if dateSearch_DateObj?date?string.short?contains(curEntryDate?date?string.short) > 
296	                <#assign listToShow = listToShow + i> 
297	            </#if> 
298            </#list> 
299        </#if> 
300        <#list listToShow as curEntry> 
301            <#assign  
302                curEntry = curEntry 
303             
304			    renderer = curEntry.getAssetRenderer() 
305			    article = renderer.getArticle() > 
306			 
307			<#assign firstImgUrl = "" /> 
308			 
309		    <#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
310		    <#assign journalArticle = journalArticleLocalService.fetchLatestArticle(curEntry.getClassPK()) /> 
311		    <#assign entryTitle = htmlUtil.escape(renderer.getTitle(locale)) /> 
312			 
313			<#if validator.isNotNull(journalArticle)> 
314				<#assign  content = journalArticle.getContent() />							 
315				<#if content?contains("<img")> 
316					<#assign  firstIndexImg = content?index_of("<img") /> 
317				    <#assign  newContent = content?substring(firstIndexImg)/> 
318					<#assign  lastIndexImg = newContent?index_of(">") /> 
319					<#assign  newContent = newContent?substring(0, lastIndexImg)/> 
320					 
321					<#assign strLenght= "src=\"" /> 
322					<#assign  indexSrc = newContent?index_of(strLenght) + strLenght?length /> 
323					<#assign firstImgUrl = newContent?substring(indexSrc) />								 
324					<#assign  lastIndexSrc = firstImgUrl?index_of("\"") /> 
325					<#assign firstImgUrl = firstImgUrl?substring(0,lastIndexSrc) />								 
326				</#if>														 
327			</#if> 
328			<#assign touristPhone = ""/> 
329            <#assign timeActive = ""/> 
330            <#assign address = ""/> 
331            <#assign website = ""/> 
332            <#assign document = saxReaderUtil.read(content) /> 
333            <#assign root = document.getRootElement() /> 
334            <#list root.elements() as element>	 
335                <#if element.attributeValue("name") == "phone" > 
336                    <#assign touristPhone = getterUtil.getString(element.element("dynamic-content").getText())> 
337                </#if> 
338                <#if element.attributeValue("name") == "address" > 
339                    <#assign address = getterUtil.getString(element.element("dynamic-content").getText())> 
340                </#if> 
341                <#if element.attributeValue("name") == "timeActive" > 
342                    <#assign timeActive = getterUtil.getString(element.element("dynamic-content").getText())> 
343                </#if> 
344        		<#if element.attributeValue("name") == "website" > 
345                    <#assign website = getterUtil.getString(element.element("dynamic-content").getText())> 
346                </#if> 
347        		<#if element.attributeValue("name") == "timeActive" > 
348                    <#assign timeActive = getterUtil.getString(element.element("dynamic-content").getText())> 
349                </#if> 
350            </#list> 
351			 
352			 
353			<#if article.getSmallImage()> 
354			    <#assign imgThumbnailURL = renderer.getThumbnailPath(renderRequest)> 
355			    <#elseif (firstImgUrl?length > 0)> 
356					  <#assign imgThumbnailURL = firstImgUrl>  
357				<#else> 
358				<#assign imgThumbnailURL = "/o/hcm-default-theme/images/cms/no-image.jpg" > 
359			</#if> 
360			 
361			<#assign publishDate = curEntry.getCreateDate() /> 
362			<#if (curEntry.getPublishDate()??) > 
363				<#assign publishDate = curEntry.getPublishDate() /> 
364			</#if> 
365			 
366			<#assign publishDate_txt = "(" + publishDate?date?string["dd/MM/yyyy"] + ")" /> 
367			<#assign urlArticle = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, renderer, curEntry, !stringUtil.equals(assetLinkBehavior, "showFullContent")) /> 
368			 
369			<div class="col-xs-12 col-sm-12 col-md-4 col-lg-4 article-wrapper"> 
370			    <div class="article-container"> 
371			        <a href="${urlArticle}"> 
372	                    <img src="${imgThumbnailURL}" width=100%/> 
373	                </a> 
374    			    <div class="article-title"> 
375                        <a href="${urlArticle}"> 
376                            ${article.getTitle()?replace('<[^>]+>','','r')} 
377                        </a> 
378    					<#if enableButtonEditArticle == "true"> 
379    						<@getEditIcon /> 
380    					</#if>					 
381    	            </div> 
382    	            <div class="article-description"> 
383    	                <div> 
384    	                    <b>Website:</b>${website} 
385    	                </div> 
386    	                <div> 
387    	                    <b>Địa chỉ:</b>${address} 
388    	                </div> 
389    	                <div> 
390    	                    <b>Số điện thoại:</b>${touristPhone} 
391    	                </div> 
392    	                <div> 
393    	                    <b>Thời gian hoạt động:</b>${timeActive} 
394    	                </div> 
395    	            </div> 
396			    </div> 
397			     
398			</div> 
399        </#list> 
400    </#if> 
401</div> 
402<#macro getEditIcon>				 
403	<#if renderer.hasEditPermission(themeDisplay.getPermissionChecker())> 
404		<#assign redirectURL = renderResponse.createRenderURL() /> 
405		${redirectURL.setParameter("mvcPath", "/add_asset_redirect.jsp")} 
406		${redirectURL.setWindowState("pop_up")} 
407		<#assign editPortletURL = renderer.getURLEdit(renderRequest, renderResponse, windowStateFactory.getWindowState("pop_up"), redirectURL)!"" /> 
408		<!--Set embedded =true để giao diện hiển thị theo hook  --> 
409		${editPortletURL.setParameter("embedded", "true")} 
410		<#if validator.isNotNull(editPortletURL)> 
411			<@liferay_ui["icon"] 
412				cssClass="pull-right" 
413				image="edit"								 
414				url="javascript:Liferay.Util.openWindow({id:'" + renderResponse.getNamespace() + "editAsset', title: '" + entryTitle + "', uri:'" + htmlUtil.escapeURL(editPortletURL.toString()) + "'});" 
415			/> 
416		</#if> 
417	</#if> 
418</#macro> 
419<script> 
420YUI().use( 
421  'aui-datepicker', 
422  function(Y) { 
423    new Y.DatePicker( 
424
425        trigger: 'input', 
426      
427        mask: '%d/%m/%Y', 
428        popover: { 
429          zIndex: 1 
430        }, 
431        panes: 1 
432
433    ); 
434
435); 
436</script>