Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
Denied access to method or field getParameter of class org.apache.catalina.core.ApplicationHttpRequest

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign tuNgayParam = request.getPara...  [in template "29795641980326#20120#512621" at line 6, column 1]
----
1<#import "${templatesPath}/33140" as apme /> 
2<#global defaultThumbnailImageUrl = "/documents/20117/32827/logo-nhnnvn-3.png" /> 
3<#if currentURL?has_content> 
4	${currentURL} 
5</#if> 
6<#assign tuNgayParam = request.getParameter("tuNgay")!"" > 
7<#assign denNgayParam = request.getParameter("denNgay")!"" > 
8 
9<#assign tuNgayDate = ""> 
10<#assign denNgayDate = ""> 
11 
12 
13<#if tuNgayParam?has_content> 
14  <#attempt> 
15    <#assign tuNgayDate = dateUtil.parseDate("yyyy-MM-dd", tuNgayParam, locale)> 
16  <#recover> 
17    <p style="color:red;">Ngày bắt đầu không đúng định dạng: ${tuNgayParam}</p> 
18  </#recover> 
19</#if> 
20 
21<#if denNgayParam?has_content> 
22  <#attempt> 
23    <#assign denNgayDate = dateUtil.parseDate("yyyy-MM-dd", denNgayParam, locale)> 
24  <#recover> 
25    <p style="color:red;">Ngày kết thúc không đúng định dạng: ${denNgayParam}</p> 
26  </#recover> 
27</#if> 
28 
29<#-- Kiểm tra xem có tham số ngày hợp lệ nào không --> 
30<#assign hasDateFilter = (tuNgayDate?has_content) || (denNgayDate?has_content)> 
31 
32<#if hasDateFilter> 
33  <#assign filteredEntries = []> 
34  <#list entries as entry> 
35    <#assign publishDate = entry.getPublishDate()> 
36    <#if publishDate?? && ( 
37      (!tuNgayDate?has_content || publishDate?long >= tuNgayDate?long) && 
38      (!denNgayDate?has_content || publishDate?long <= denNgayDate?long) 
39    )> 
40      <#assign filteredEntries = entries> 
41    </#if> 
42  </#list> 
43<#else> 
44  <#assign filteredEntries = entries> 
45</#if> 
46 
47<#if !filteredEntries?has_content> 
48  <#if !themeDisplay.isSignedIn()> 
49    ${renderRequest.setAttribute("PORTLET_CONFIGURATOR_VISIBILITY", true)} 
50  </#if> 
51 
52  <div class="alert alert-info"> 
53      <@liferay_ui["message"] key="there-are-no-results" /> 
54  </div> 
55</#if> 
56<div class="news-list-container danh-sach-tin-tuc-v41"> 
57  <div class="news-grid"> 
58	     <#list filteredEntries as entry> 
59            <#global 
60                assetRenderer = entry.getAssetRenderer() 
61                entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale)) 
62                viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, entry, !stringUtil.equals(assetLinkBehavior, "showFullContent")) 
63            /> 
64				     <#if entry?index lt 6> 
65               <div class="news-card"> 
66                <div class="news-card-title"> 
67                    <a href="${viewURL}" class="news-title">${entryTitle}</a> 
68                </div> 
69							<div class="news-card-content"> 
70							<#assign ddm = assetRenderer.getDDMFormValuesReader() 
71                      .getDDMFormValues() 
72                      .getDDMFormFieldValuesMap() /> 
73								<#if ddm["AnhNoiBat"]?? && ddm["AnhNoiBat"][0].getValue().getString(locale)?has_content> 
74                <#assign thumbnailPreview = jsonFactoryUtil.createJSONObject(ddm["AnhNoiBat"][0].getValue().getString(locale)).getString('url') /> 
75									<#assign thumbnailPreview2 = jsonFactoryUtil.createJSONObject(ddm["AnhNoiBat"][0].getValue().getString(locale)) /> 
76								   <a href="${viewURL}"> 
77								      <img src="${thumbnailPreview2}" /> 
78									</a> 
79									</#if> 
80							<#if assetRenderer.getThumbnailPath(renderRequest)??  > 
81                     <@apme.getThumbnailPreview/> 
82								<#else> 
83							 
84							<#assign thumbnailPreview ="" /> 
85							<#if ddm["AnhNoiBat_Url"]?? && ddm["AnhNoiBat_Url"]?has_content && ddm["AnhNoiBat_Url"][0].getValue().getString(locale)?has_content> 
86								 <#assign thumbnailPreview = ddm["AnhNoiBat_Url"][0].getValue().getString(locale)?string /> 
87								   <a href="${viewURL}"> 
88								      <img src="${thumbnailPreview}" /> 
89									</a> 
90								<#else> 
91									<#assign thumbnailPreview = ddm["AnhNoiBat"][0].getValue().getString(locale)?string /> 
92								   <a href="${viewURL}"> 
93								      <img src="${thumbnailPreview}" /> 
94									</a> 
95							</#if> 
96            </#if> 
97								    <@apme.getSummary /> 
98                </div> 
99                <div class="news-date"> 
100                 <#if entry.getPublishDate()?has_content> 
101                     (${dateUtil.getDate(entry.getPublishDate(), "dd/MM/yyyy", locale)}) 
102                 </#if> 
103                </div> 
104            </div> 
105			       </#if>				  
106       </#list> 
107   </div> 
108	<div class="fragment_2735"> 
109     <div class="title-wrapper"> 
110    <img src="https://state-bank.vercel.app/images/credit-org-icon.svg" alt="Icon" class="service-icon">  
111    <span class="service-title">CÁC TIN KHÁC</span> 
112  </div> 
113</div> 
114	<div class="news-grid2"> 
115	     <#list filteredEntries as entry> 
116            <#global 
117                assetRenderer = entry.getAssetRenderer() 
118                entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale)) 
119                viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, entry, !stringUtil.equals(assetLinkBehavior, "showFullContent")) 
120            /> 
121					   <#if entry?index gte 6> 
122						  <div class="col-md-12"> 
123						    <@apme.getEntryTitleAndDate /> 
124						 </div> 
125						 </#if>		  
126        </#list> 
127   </div> 
128	<div class="news-search"> 
129    <button id="toggle-search">Xem bài theo ngày tháng >></button> 
130  </div> 
131  <div class="search-form-wrapper" style="display: none; padding: 10px;background: #f0eceb;"> 
132    <div class="search-form-row"> 
133     <label for="tuNgay"><strong>Từ ngày</strong></label> 
134      <div class="input-with-icon"> 
135      <input type="date" id="tuNgay" /> 
136      <img src="https://cdn-icons-png.flaticon.com/512/747/747310.png" class="calendar-icon" onclick="document.getElementById('tuNgay').showPicker()" /> 
137    </div> 
138     <label for="denNgay"><strong>Đến ngày</strong></label> 
139      <div class="input-with-icon"> 
140      <input type="date" id="denNgay" /> 
141      <img src="https://cdn-icons-png.flaticon.com/512/747/747310.png" class="calendar-icon" onclick="document.getElementById('denNgay').showPicker()" /> 
142    </div> 
143    <button type="submit" class="search-btn">Tìm kiếm</button> 
144  </div> 
145  </div> 
146</div> 
147 
148<style> 
149.danh-sach-tin-tuc-v41 { 
150		  background: #ffffff; 
151      border: 1px solid #ddd; 
152
153.news-grid { 
154    display: grid; 
155    grid-template-columns: repeat(2, 1fr); 
156
157.news-card { 
158    background: #ffffff; 
159    border: 1px solid #ddd; 
160    padding: 15px; 
161    height: 100%; 
162    display: flex; 
163    flex-direction: column; 
164    justify-content: top; 
165
166.news-title { 
167    color: #CD7B2C; 
168    text-decoration: none; 
169    display: block; 
170    margin-bottom: 10px; 
171    text-align: justify; 
172    font-weight: bold; 
173    font-size: 16px; 
174    text-decoration: none; 
175    line-height: 17px; 
176	 
177
178.news-divider { 
179    height: 1px; 
180    background-color: #ccc; 
181    margin: 10px 0; 
182
183.news-summary { 
184    font-size: 16px; 
185    color: #333; 
186    text-align: justify; 
187    flex-grow: 1; 
188
189.news-date { 
190    color: #9b1b42; 
191    text-align: right; 
192    margin-top: 10px; 
193    font-size: 16px; 
194	 font-weight: normal; 
195
196.top-news-detail{ 
197    color: #5e5d5f; 
198    font-size: 16px; 
199    text-align: justify; 
200		padding-top: 0%; 
201
202	.news-card-content img { 
203		float: left; 
204    margin-bottom: 0px; 
205	  width: 120px; 
206    margin-right: 10px; 
207		 padding-top: 7px; 
208
209.aspect-ratio-43{ 
210		padding-top: 0%; 
211		float: left; 
212    margin-bottom: 0px; 
213	  width: 120px; 
214    margin-right: 10px; 
215
216	.aspect-ratio-43 img, video{ 
217		    padding-top: 7px; 
218
219 .fragment_2735 { 
220  background: #f0eceb; 
221  padding: 8px 12px; 
222	margin: 30px 5px 0px 5px; 
223
224.title-wrapper { 
225  display: flex; 
226  align-items: center; 
227  gap: 10px; 
228
229	.top-news-detail, .title-news { 
230      display: inline; 
231    -webkit-line-clamp: 4; 
232    -webkit-box-orient: vertical; 
233    overflow: hidden; 
234    min-height: 20px; 
235    text-align: justify; 
236
237.danh-sach-tin-tuc-v41 .service-icon { 
238  width: 25px; 
239  height: 20px; 
240	color: #CD7B2C; 
241
242.danh-sach-tin-tuc-v41 .service-title { 
243    font-size: 16px; 
244    font-weight: bold; 
245    color: #CD7B2C; 
246    text-transform: uppercase; 
247    font-family: Arial; 
248    margin: 0; 
249    padding: 0; 
250
251.danh-sach-tin-tuc-v41 .news-grid2 { 
252		 padding: 8px 12px; 
253
254.span.date-about { 
255    color: #971f43; 
256
257.news-grid2 .title-news h6 { 
258	    font-weight: lighter!important; 
259	line-height: 1.9; 
260
261.news-grid2 .title-news h6:before{ 
262		content: "■"; color: var(--brand-color-2); left: 13px; top: -2px; padding-right: 15px; 
263
264	.date-about { 
265		  color: #971f43; 
266
267	.date-about  i{ 
268		font-style: normal !important; 
269
270// css tìm kiếm 
271.search-form-wrapper { 
272  padding: 10px; 
273  background: #f0eceb; 
274  font-family: Arial, sans-serif; 
275
276 
277.search-form-row { 
278  display: flex; 
279  align-items: center; 
280  gap: 10px; 
281  flex-wrap: wrap; 
282
283 
284.search-form-wrapper label { 
285  margin-bottom: 0; 
286  font-weight: normal; 
287  font-size: 14px; 
288
289 
290.input-with-icon { 
291  position: relative; 
292
293 
294.input-with-icon input[type="date"] { 
295  padding: 5px 30px 5px 5px; 
296  width: 140px; 
297  height: 30px; 
298  font-size: 14px; 
299
300 
301.calendar-icon { 
302  position: absolute; 
303  right: 6px; 
304  top: 50%; 
305  transform: translateY(-50%); 
306  width: 16px; 
307  height: 16px; 
308  cursor: pointer; 
309  opacity: 0.8; 
310
311 
312.search-btn { 
313  background-color: #9b1b42; 
314  color: white; 
315  font-weight: bold; 
316  padding: 5px 15px; 
317  border: none; 
318  border-radius: 3px; 
319  height: 30px; 
320  font-size: 14px; 
321  cursor: pointer; 
322
323 
324.search-btn:hover { 
325  background-color: #86133a; 
326
327@media (max-width: 768px) { 
328  /* Chuyển layout sang 1 cột */ 
329  .news-grid { 
330    grid-template-columns: 1fr; 
331
332 
333  /* Sắp xếp lại thứ tự và bố cục của news card */ 
334  .news-card { 
335    display: flex; 
336    flex-direction: column; 
337    width: 100%; 
338
339 
340  .news-card-title { 
341    order: 1; 
342    width: 100%; 
343    margin-bottom: 10px; 
344
345 
346  .news-card-content { 
347    order: 2; 
348    display: flex; 
349    flex-direction: column; 
350    width: 100%; 
351
352 
353  .news-card-content img { 
354    width: 100%; 
355    height: auto; 
356    float: none; 
357    margin: 0 0 10px 0; 
358
359 
360  .news-date { 
361    order: 3; 
362    width: 100%; 
363    text-align: left; 
364    margin-top: 10px; 
365
366
367 
368 
369 
370	 
371</style> 
372	<script  data-senna-track="temporary"> 
373 document.addEventListener("DOMContentLoaded", function () { 
374	 debugger 
375  const nutTimKiem = document.getElementById("toggle-search"); 
376  const form = document.querySelector(".search-form-wrapper"); 
377  const nutSubmit = document.querySelector(".search-btn"); 
378 
379  nutTimKiem.addEventListener("click", function () { 
380    form.style.display = (form.style.display === "none" || form.style.display === "") ? "block" : "none"; 
381  }); 
382 
383  nutSubmit.addEventListener("click", function () { 
384    const tuNgay = document.getElementById("tuNgay").value; 
385    const denNgay = document.getElementById("denNgay").value; 
386		 
387if (tuNgay || denNgay) { 
388    document.querySelectorAll('a[href*="_com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet_INSTANCE_"]').forEach(link => { 
389      const url = new URL(link.href); 
390 
391      // Lấy redirect gốc 
392      const originalRedirect = url.searchParams.get('_com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet_INSTANCE_jaxi_redirect'); 
393      if (originalRedirect) { 
394        const decodedRedirect = decodeURIComponent(originalRedirect); 
395        const redirectURL = new URL(decodedRedirect, window.location.origin); 
396 
397        if (tuNgay) redirectURL.searchParams.set("tuNgay", tuNgay); 
398        if (denNgay) redirectURL.searchParams.set("denNgay", denNgay); 
399 
400        // Gán lại redirect sau khi thêm params 
401        url.searchParams.set('_com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet_INSTANCE_jaxi_redirect', redirectURL.pathname + '?' + redirectURL.searchParams.toString()); 
402 
403        // Gán lại href 
404        link.href = url.toString(); 
405
406    }); 
407
408    // Lấy URL hiện tại 
409    const url = new URL(window.location.href); 
410    const params = url.searchParams; 
411 
412    // Cập nhật tham số tuNgay và denNgay trên URL 
413    if (tuNgay) { 
414      params.set('tuNgay', tuNgay); 
415    } else { 
416      params.delete('tuNgay'); 
417
418 
419    if (denNgay) { 
420      params.set('denNgay', denNgay); 
421    } else { 
422      params.delete('denNgay'); 
423
424 
425    // Cập nhật URL search params 
426    url.search = params.toString(); 
427 
428    // Chuyển hướng đến URL mới với tham số lọc 
429    window.location.href = url.toString(); 
430  }); 
431 
432  // Khôi phục giá trị từ URL khi tải trang 
433  const urlParams = new URLSearchParams(window.location.search); 
434  const tuNgayParam = urlParams.get('tuNgay'); 
435  const denNgayParam = urlParams.get('denNgay'); 
436 
437  if (tuNgayParam) { 
438    document.getElementById('tuNgay').value = tuNgayParam; 
439
440  if (denNgayParam) { 
441    document.getElementById('denNgay').value = denNgayParam; 
442
443}); 
444 
445		 
446</script>