Đại hội đồng cổ đông

Có lỗi xảy ra trong quá trình xử lý biểu mẫu.
The following has evaluated to null or missing:
==> fileData.extension  [in template "85872286966386#20120#78665" at line 52, column 22]

----
Tip: It's the step after the last dot that caused this error, not those before it.
----
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: #if fileData.extension?lower_case == ...  [in template "85872286966386#20120#78665" at line 52, column 17]
----
1<div class="mx-auto sm:py-0 xl:py-[24px] w-100"> 
2  <!-- Danh sách thông báo --> 
3  <div class="sm:w-full xl:w-[1320px] mx-auto px-[16px]  sm:px-[24.25px] xl:px-0"> 
4		 <#if entries?has_content> 
5    <#list entries as entry> 
6      <#assign fileNumber=[] /> 
7      <#global entry=entry assetRenderer=entry.getAssetRenderer() 
8        entryTitle=htmlUtil.escape(assetRenderer.getTitle(locale)) 
9        viewURL=assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, entry, 
10        !stringUtil.equals(assetLinkBehavior, "showFullContent" )) /> 
11 
12      <#assign ddmValuesMap=assetRenderer.getDDMFormValuesReader().getDDMFormValues().getDDMFormFieldValuesMap() /> 
13 
14      <#list ddmValuesMap["Fieldset74441881"] as fieldSet> 
15        <#-- fieldSet ngoài cùng --> 
16 
17        <#list fieldSet.getNestedDDMFormFieldValues() as nestedField> 
18          <#-- Kiểm tra nếu là fieldset con (File Đính Kèm) --> 
19          <#if nestedField.getName() == "Fieldset00399837"> 
20            <#-- Đây là repeatable, phải lặp tiếp --> 
21            <#list nestedField.getNestedDDMFormFieldValues() as fileField> 
22              <#if fileField.getName() == "file_name"> 
23                <#assign fileName = fileField.getValue().getString(locale) /> 
24              </#if> 
25 
26              <#if fileField.getName() == "file_link"> 
27                <#assign jsonString = fileField.getValue().getString(locale) /> 
28                <#if jsonString?has_content> 
29                  <#assign jsonObj=jsonFactoryUtil.createJSONObject(jsonString) /> 
30                  <#assign fileLink="/documents/" + jsonObj.getString("groupId") + "/" + jsonObj.getString("fileEntryId") 
31                    + "/" + jsonObj.getString("title") + "." + jsonObj.getString("extension") + "/" + 
32                    jsonObj.getString("uuid") /> 
33                  <#assign fileNumber +=[ { "link" : fileLink, "jsonString" : jsonString } ] /> 
34                </#if> 
35              </#if> 
36            </#list> 
37          </#if> 
38        </#list> 
39      </#list> 
40 
41      <!-- Item --> 
42      <div class="flex flex-col sm:flex-col xl:flex-row items-start py-[16px] sm:py-[24px] xl:py-[30px] border-b border-gray-100 transition-colors gap-[8px] sm:gap-[8px] xl:gap-[80px]"> 
43        <div class=""> 
44          <div class="text-[14px] sm:text-[16px] xl:text-[17px] date-title">${entry.getPublishDate()?string("dd/MM/yyyy")}</div> 
45        </div> 
46 
47        <div class="flex flex-col sm:flex-row xl:flex-row gap-[8px] sm:gap-[unset] xl:gap-[unset]  items-start sm:items-center xl:items-start justify-between w-full"> 
48          <div class="flex gap-[10px] sm:gap-[12px] xl:gap-[14px] items-center sm:max-w-[75%]"> 
49            <div class="w-[24px] h-[24px] sm:w-[32px] sm:h-[32px] xl:w-[32px] xl:h-[32px] flex items-center justify-center"> 
50              <#if fileNumber?has_content> 
51                <#assign fileData=jsonFactoryUtil.createJSONObject(fileNumber[0].jsonString) /> 
52                <#if fileData.extension?lower_case=="pdf"> 
53                  <img src="/documents/d/investor/file-pdf" alt="icon_pdf"> 
54                <#elseif fileData.extension?lower_case=="doc" || fileData.extension?lower_case=="docx"> 
55                  <img src="/documents/d/investor/file-pdf-1-1" alt="icon_doc"> 
56                <#elseif fileData.extension?lower_case=="xls" || fileData.extension?lower_case=="xlsx"> 
57                  <img src="/documents/d/investor/file-excel" alt="icon_xlsx"> 
58                <#elseif fileData.extension?lower_case=="rar" || fileData.extension?lower_case=="zip"> 
59                  <img src="/documents/d/investor/file-pdf" alt="icon_file"> 
60                <#else> 
61                  <img src="/documents/d/investor/huge-icon" alt="icon_file"> 
62                </#if> 
63              <#else> 
64                <img src="/documents/d/investor/file-pdf" alt="icon_file"> 
65              </#if> 
66            </div> 
67 
68            <div class="flex-1 min-w-0"> 
69              <h3 class="text-[14px] sm:text-[16px] xl:text-[18px] title-file text-left"> 
70                ${entryTitle} 
71              </h3> 
72            </div> 
73          </div> 
74 
75          <div class="flex gap-[24px] sm:gap-[32px] xl:gap-[32px] w-full sm:w-[unset] justify-end"> 
76            <a href="${viewURL}" class="btn-color-text text-[14px]"> 
77              Xem chi tiết 
78            </a> 
79            <#if fileNumber?has_content> 
80              <#list fileNumber as f> 
81                <a href="${f.link}" 
82                  class="flex gap-[8px] "> 
83                  <img src="/documents/d/investor/dowload" alt="btn-color-text"> 
84                  <span class="btn-color-text text-[14px]">${languageUtil.get(locale,"download")}</span> 
85                </a> 
86              </#list> 
87            </#if> 
88          </div> 
89        </div> 
90      </div> 
91    </#list> 
92		</#if>					 
93  </div> 
94</div> 
95 
96					<style> 
97						.btn-color-text{ 
98						color: var(--Color-Palletes-Sea-Blue-Normal, #006095); 
99             font-style: normal; 
100           font-weight: 600; 
101             line-height: 20px; /* 142.857% */ 
102
103						.entry-title.taglib-categorization-filter{ 
104						display: none; 
105
106						.date-title{ 
107							color: var(--Neutral-Neutral-Grey-1-Neutral-Gray-700, #344051); 
108 
109 
110 
111font-style: normal; 
112font-weight: 400; 
113line-height: 24px; /* 141.176% */ 
114
115						.title-file{ 
116						color: var(--Base-Color-Black, #000); 
117font-style: normal; 
118/*font-weight: 600;*/ 
119font-weight: unset;	 
120line-height: 140%; /* 25.2px */ 
121
122						 
123						 
124						/* pagination */ 
125 
126.pagination-results { 
127    display: none; 
128
129 
130.pagination-bar { 
131    display: flex; 
132    justify-content: center; 
133
134 
135ul.pagination li:first-child span#qfkd____::before { 
136		<#if locale == "vi_VN"> 
137	 content: "Trước"; 
138						<#else> 
139	 content: "Pre"; 
140						</#if> 
141     
142    color: var(--Gray-500, #6B7280); 
143    text-align: center; 
144    font-size: 17px; 
145    font-style: normal; 
146    font-weight: 600; 
147    line-height: normal; 
148
149 
150span#qfkd____ svg { 
151    display: none; 
152
153 
154ul.pagination li.page-item.active { 
155    border-radius: 6px; 
156    background: var(--Base-Color-Picton-Blue, #4CB8E9); 
157    display: flex; 
158    width: 40px; 
159    height: 40px; 
160    justify-content: center; 
161    align-items: center; 
162    gap: 20px; 
163
164 
165ul.pagination li.page-item.active .page-link { 
166    border-radius: 6px; 
167    color: var(--Base-Color-White, #FFF); 
168
169  
170ul.pagination li:last-child span#jbfs____::before { 
171	<#if locale == "vi_VN"> 
172	 content: "Tiếp"; 
173						<#else> 
174	 content: "Next"; 
175						</#if> 
176    
177    color: var(--Gray-500, #6B7280); 
178    text-align: center; 
179    font-size: 17px; 
180    font-style: normal; 
181    font-weight: 600; 
182    line-height: normal; 
183
184 
185span#jbfs____ svg { 
186    display: none; 
187
188 
189a.page-link { 
190    border: none; 
191    display: flex; 
192    width: 40px; 
193    height: 40px; 
194    justify-content: center; 
195    align-items: center; 
196    gap: 20px; 
197    color: var(--Gray-500, #6B7280); 
198    text-align: center; 
199 
200    font-size: 17px; 
201    font-style: normal; 
202    font-weight: 600; 
203    line-height: normal; 
204
205 
206li.page-item.disabled { 
207    align-items: center; 
208    display: flex; 
209
210 
211.page-item.active .page-link::before { 
212    background-color: unset; 
213
214 
215/* pagination */ 
216					</style>