Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing:
==> result.getJSONObject("data").getJSONArray("items")  [in template "1084819#1084854#4104773" at line 26, column 11]

----
Tip: If the failing expression is known to be 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: doc = result.getJSONObject("data").ge...  [in template "1084819#1084854#4104773" at line 26, column 5]
	- Reached through: #assign-container  [in template "1084819#1084854#4104773" at line 24, column 1]
----
1<#import "_TEMPLATE_CONTEXT_/1084819/1099604/23609/2387505" as d40> 
2 
3<#assign 
4    SRLS = serviceLocator.findService("eu.suggesto.servicecs.service.SuggestoRecommenderLocalService") 
5    PUTIL = objectUtil("com.liferay.portal.kernel.util.PortalUtil") 
6    jsonParams = result.getNamespacedParameters().getString("jsonParams") 
7    serviceName = "tdm40" 
8    collection = "tdm_sila" 
9    query = "{'id': 0}" 
10    id = "" 
11/> 
12 
13<#if jsonParams?has_content> 
14    <#assign 
15        params = d40.createObject(jsonParams) 
16        id = params.getString("id") 
17    /> 
18     
19    <#if id?has_content> 
20        <#assign query = "{'id': ${id}}"> 
21    </#if> 
22</#if> 
23 
24<#assign 
25    result = SRLS.search("0", serviceName, collection, query, "", 0, 1) 
26    doc = result.getJSONObject("data").getJSONArray("items").getJSONObject(0) 
27/> 
28 
29<#if doc.getString("title")?has_content> 
30    ${PUTIL.setPageTitle(doc.getString("title")?capitalize, request)} 
31</#if> 
32 
33<section id="banner" class="tw:h-[20vh] lg:tw:h-[45vh] tw:overflow-hidden"> 
34    <div class="card card-flat tw:w-full tw:h-full"> 
35        <img data-src="${doc.op_img_url}" loading="lazy" class="lazyload tw:w-full tw:h-full tw:object-cover" alt="${doc.title?js_string}"/> 
36        <div class="card-img-overlay tw:bg-gradient-to-b tw:from-transparent tw:via-trasparent tw:to-dark/40 <lg:tw:hidden"></div> 
37    </div> 
38</section> 
39 
40 
41 
42<div class="container tw:my-10 lg:tw:my-20"> 
43    <div class="card-row"> 
44        <div class="autofit-col autofit-col-expand"> 
45            <div class="autofit-section"> 
46                <p class="tw:text-dark tw:text-2xl tw:font-semibold tw:mb-5 lg:tw:text-5xl"> 
47                    ${doc.title} 
48                </p> 
49            </div> 
50        </div> 
51        <div class="autofit-col tw:mt-auto <lg:tw:hidden"> 
52            <a href="/dormire" class="btn btn-block tw:border-2 tw:border-dark tw:text-dark tw:text-base hover:tw:bg-dark hover:tw:text-white tw:transition-colors tw:duration-300 tw:py-4 tw:inline-block"> 
53                ${d40.getLabel("torna_indietro")} 
54            </a> 
55        </div> 
56    </div> 
57</div> 
58 
59<div class="tw:bg-lightgray"> 
60    <div class="container tw:py-10"> 
61        <div class="row"> 
62            <div class="col-12 col-lg-6"> 
63                <div class="aspect-ratio aspect-ratio-4-to-3 tw:rounded-md"> 
64                    <img data-src="${doc.op_img_url}" loading="lazy" class="lazyload aspect-ratio-item-fluid tw:w-full tw:h-full tw:object-cover" alt="${doc.title?js_string}" /> 
65                </div> 
66            </div> 
67             
68            <div class="col-12 col-lg-6"> 
69                <div class="lg:tw:ml-10 <lg:tw:mt-10"> 
70                    <div class="tw:space-y-4 tw:mb-5"> 
71                        <div class="card-row tw:space-x-3"> 
72                            <div class="autofit-col"> 
73                                <div class="autofit-section"> 
74                                    <div class="center-child tw:border-2 tw:border-dark tw:rounded-full tw:h-20 tw:w-20"> 
75                                        <i class="fas fa-paw tw:text-dark fa-2x"></i> 
76                                    </div> 
77                                </div> 
78                            </div> 
79                            <div class="autofit-col autofit-col-expand"> 
80                                <div class="autofit-section"> 
81                                    <p class="tw:text-dark tw:font-semibold tw:uppercase tw:mb-2">${d40.getLabel("animali_ammessi")}</p> 
82                                    <p class="tw:text-dark text-capitalize">${doc.op_animals}</p> 
83                                </div> 
84                            </div> 
85                        </div> 
86                    </div> 
87                     
88                    <div class="tw:space-y-4 tw:mb-5"> 
89                        <div class="card-row tw:space-x-3"> 
90                            <div class="autofit-col"> 
91                                <div class="autofit-section"> 
92                                    <div class="center-child tw:border-2 tw:border-dark tw:rounded-full tw:h-20 tw:w-20"> 
93                                        <i class="fas fa-restroom tw:text-dark fa-2x"></i> 
94                                    </div> 
95                                </div> 
96                            </div> 
97                            <div class="autofit-col autofit-col-expand"> 
98                                <div class="autofit-section"> 
99                                    <p class="tw:text-dark tw:font-semibold tw:uppercase tw:mb-2">${d40.getLabel("bagno")}</p> 
100                                    <p class="tw:text-dark text-capitalize">${doc.op_bathroom}</p> 
101                                </div> 
102                            </div> 
103                        </div> 
104                    </div> 
105                     
106                    <div class="tw:space-y-4 tw:mb-5"> 
107                        <div class="card-row tw:space-x-3"> 
108                            <div class="autofit-col"> 
109                                <div class="autofit-section"> 
110                                    <div class="center-child tw:border-2 tw:border-dark tw:rounded-full tw:h-20 tw:w-20"> 
111                                        <i class="fas fa-bed-alt tw:text-dark fa-2x"></i> 
112                                    </div> 
113                                </div> 
114                            </div> 
115                            <div class="autofit-col autofit-col-expand"> 
116                                <div class="autofit-section"> 
117                                    <p class="tw:text-dark tw:font-semibold tw:uppercase tw:mb-2">${d40.getLabel("camera_letto")}</p> 
118                                    <p class="tw:text-dark text-capitalize">${doc.op_bedroom}</p> 
119                                </div> 
120                            </div> 
121                        </div> 
122                    </div> 
123                     
124                    <div class="tw:space-y-4 tw:mb-5"> 
125                        <div class="card-row tw:space-x-3"> 
126                            <div class="autofit-col"> 
127                                <div class="autofit-section"> 
128                                    <div class="center-child tw:border-2 tw:border-dark tw:rounded-full tw:h-20 tw:w-20"> 
129                                        <i class="fas fa-wifi tw:text-dark fa-2x"></i> 
130                                    </div> 
131                                </div> 
132                            </div> 
133                            <div class="autofit-col autofit-col-expand"> 
134                                <div class="autofit-section"> 
135                                    <p class="tw:text-dark tw:font-semibold tw:uppercase tw:mb-2">Internet</p> 
136                                    <p class="tw:text-dark text-capitalize">${doc.op_internet}</p> 
137                                </div> 
138                            </div> 
139                        </div> 
140                    </div> 
141                     
142                    <div class="tw:space-y-4 tw:mb-5"> 
143                        <div class="card-row tw:space-x-3"> 
144                            <div class="autofit-col"> 
145                                <div class="autofit-section"> 
146                                    <div class="center-child tw:border-2 tw:border-dark tw:rounded-full tw:h-20 tw:w-20"> 
147                                        <i class="fas fa-utensils tw:text-dark fa-2x"></i> 
148                                    </div> 
149                                </div> 
150                            </div> 
151                            <div class="autofit-col autofit-col-expand"> 
152                                <div class="autofit-section"> 
153                                    <p class="tw:text-dark tw:font-semibold tw:uppercase tw:mb-2">${d40.getLabel("cucina")}</p> 
154                                    <p class="tw:text-dark text-capitalize">${doc.op_kitchen}</p> 
155                                </div> 
156                            </div> 
157                        </div> 
158                    </div> 
159                     
160                    <div class="tw:space-y-4 tw:mb-5"> 
161                        <div class="card-row tw:space-x-3"> 
162                            <div class="autofit-col"> 
163                                <div class="autofit-section"> 
164                                    <div class="center-child tw:border-2 tw:border-dark tw:rounded-full tw:h-20 tw:w-20"> 
165                                        <i class="fas fa-parking tw:text-dark fa-2x"></i> 
166                                    </div> 
167                                </div> 
168                            </div> 
169                            <div class="autofit-col autofit-col-expand"> 
170                                <div class="autofit-section"> 
171                                    <p class="tw:text-dark tw:font-semibold tw:uppercase tw:mb-2">${d40.getLabel("parcheggio")}</p> 
172                                    <p class="tw:text-dark text-capitalize">${doc.op_parking}</p> 
173                                </div> 
174                            </div> 
175                        </div> 
176                    </div> 
177                     
178                    <#-- 
179                    <div class="card-row"> 
180                        <div class="autofit-col"> 
181                            <div class="autofit-section"> 
182                                <a href="#request-info" class="btn btn-block tw:border-2 tw:border-dark tw:text-dark tw:text-base hover:tw:bg-dark hover:tw:text-white tw:transition-colors tw:duration-300 tw:py-4 tw:uppercase tw:px-5"> 
183                                    ${d40.getLabel("richiedi_info")} 
184                                </a> 
185                            </div> 
186                        </div> 
187                    </div> 
188                    --> 
189                </div> 
190            </div> 
191        </div> 
192    </div> 
193</div> 
194 
195<#if doc.op_gallery?has_content> 
196    <div id="gallery" class="container tw:relative tw:my-10"> 
197        <div class="swiper-container"> 
198            <button type="button" class="btn-prev semicircle-right tw:bg-dark/70 tw:w-7 tw:h-14 tw:left-0 tw:top-2/4 tw:-translate-y-2/4 tw:absolute tw:z-5"> 
199                <span class="sr-only">${d40.getLabel("precedente")}</span> 
200                <i class="fal fa-chevron-left tw:text-white"></i> 
201            </button> 
202            <button type="button" class="btn-next semicircle-left tw:bg-dark/70 tw:w-7 tw:h-14 tw:right-0 tw:top-2/4 tw:-translate-y-2/4 tw:absolute tw:z-5"> 
203                <span class="sr-only">${d40.getLabel("successivo")}</span> 
204                <i class="fal fa-chevron-right tw:text-white"></i> 
205            </button> 
206             
207            <div class="swiper-wrapper"> 
208                <#list doc.op_gallery?split(",") as slide> 
209                    <div class="swiper-slide"> 
210                        <a href="javascript:void(0);" data-toggle="modal" data-target="#lightbox-modal" data-slider="${slide?index}"> 
211                            <div class="aspect-ratio aspect-ratio-4-to-3 tw:rounded-md tw:shadow-2xl"> 
212                                <img data-src="${slide}" loading="lazy" class="lazyload aspect-ratio-item-fluid tw:object-cover tw:w-full tw:h-full" alt="image ${slide?counter}" /> 
213                            </div> 
214                        </a> 
215                    </div> 
216                </#list> 
217            </div> 
218        </div> 
219    </div> 
220     
221    <div id="lightbox-modal" tabindex="-1" role="dialog" class="modal fade"> 
222        <div class="modal-dialog modal-full-screen tw:inset-0 tw:border-none tw:shadow-none"> 
223            <div class="modal-content tw:bg-transparent"> 
224                <div class="modal-body tw:overflow-hidden"> 
225                    <div class="tw:absolute tw:top-0 tw:right-0 tw:z-5"> 
226                        <button type="button" data-dismiss="modal" class="btn btn-monospaced btn-secondary m-3"> 
227                            <i class="fal fa-times fa-lg"></i> 
228                        </button> 
229                    </div> 
230                    <div id="lightbox-swiper" class="swiper-container tw:h-3/4 tw:my-auto"> 
231                        <div class="swiper-button-prev tw:w-12 tw:h-12"> 
232                            <span class="sticker sticker-circle tw:bg-green tw:w-full tw:h-full"> 
233                                <span class="sticker-overlay"> 
234                                    <i class="fas fa-chevron-left fa-2x tw:text-white"></i> 
235                                </span> 
236                            </span> 
237                        </div> 
238                        <div class="swiper-button-next tw:w-12 tw:h-12"> 
239                            <span class="sticker sticker-circle tw:bg-green tw:w-full tw:h-full"> 
240                                <span class="sticker-overlay"> 
241                                    <i class="fas fa-chevron-right fa-2x tw:text-white"></i> 
242                                </span> 
243                            </span> 
244                        </div> 
245                        <div class="swiper-wrapper tw:h-full"> 
246                            <#list doc.op_gallery?split(",") as slide> 
247                                <div class="swiper-slide tw:h-full"> 
248                                    <img data-src="${slide}" loading="lazy" class="lazyload tw:h-full tw:object-contain tw:mx-auto" alt="image ${slide?counter}" /> 
249                                </div> 
250                            </#list> 
251                        </div> 
252                    </div> 
253                    <div id="thumbnail-swiper" class="swiper-container"> 
254                        <div class="swiper-wrapper"> 
255                            <#list doc.op_gallery?split(",") as slide> 
256                                <div class="swiper-slide"> 
257                                    <img data-src="${slide}" loading="lazy" class="lazyload tw:object-cover tw:cursor-pointer tw:h-full tw:w-full" alt="image ${slide?counter}" /> 
258                                </div> 
259                            </#list> 
260                        </div> 
261                    </div> 
262                </div> 
263            </div> 
264        </div> 
265    </div> 
266</#if> 
267 
268<#if doc.content?has_content> 
269    <div class="container tw:my-10 lg:tw:my-20"> 
270        <p class="tw:text-dark tw:text-xl tw:font-semibold tw:mb-5 lg:tw:text-4xl">${d40.getLabel("nel_dettaglio")}</p> 
271        <p class="tw:text-dark"> 
272            ${doc.content} 
273        </p> 
274    </div> 
275</#if> 
276 
277<section id="contacts" class="tw:my-20"> 
278    <div class="tw:bg-lightgray"> 
279        <div class="container tw:py-5 lg:tw:py-25"> 
280            <p class="tw:text-dark tw:text-xl tw:font-semibold tw:uppercase tw:mb-10 lg:tw:text-3xl lg:mb-15"> 
281                ${d40.getLabel("dati_contatto")} 
282            </p> 
283            <div class="row"> 
284                <div class="col-12 col-lg-6"> 
285                    <div class="card-row tw:space-x-3 tw:mb-4"> 
286                        <div class="autofit-col"> 
287                            <div class="autofit-section"> 
288                                <div class="center-child tw:border-2 tw:border-dark tw:rounded-md tw:h-10 tw:w-10"> 
289                                    <span class="sr-only">Location</span> 
290                                    <i class="fas fa-map-marker-alt tw:text-dark fa-lg"></i> 
291                                </div> 
292                            </div> 
293                        </div> 
294                        <div class="autofit-col autofit-col-expand"> 
295                            <div class="autofit-section"> 
296                                <p class="tw:text-dark"> 
297                                    ${doc.op_address} 
298                                </p> 
299                            </div> 
300                        </div> 
301                    </div> 
302                </div> 
303            </div> 
304        </div> 
305    </div> 
306</section> 
307 
308<#if doc.op_gallery?has_content> 
309    <script> 
310        document.addEventListener("DOMContentLoaded", () => { 
311            new Swiper("#gallery .swiper-container", { 
312    			slidesPerView: 1, 
313    			spaceBetween: 25, 
314    			centerSlides: true, 
315    			centerInsufficientSlides: true, 
316    			navigation: { 
317    				prevEl: ".btn-prev", 
318    				nextEl: ".btn-next", 
319    			}, 
320    			breakpoints: { 
321    				768: { 
322    					slidesPerView: 2, 
323    					spaceBetween: 25, 
324    				}, 
325    				992: { 
326    					slidesPerView: 3, 
327    					spaceBetween: 25, 
328    				}, 
329    			}, 
330    		}); 
331     
332    		var thumbnails = new Swiper("#thumbnail-swiper", { 
333    			spaceBetween: 10, 
334    			slidesPerView: 2, 
335    			centerInsufficientSlides: true, 
336    			freeMode: true, 
337    			watchSlidesVisibility: true, 
338    			watchSlidesProgress: true, 
339    			breakpoints: { 
340    				768: { 
341    					slidesPerView: 3, 
342    				}, 
343    				992: { 
344    					slidesPerView: 4, 
345    				}, 
346    				1200: { 
347    					slidesPerView: 5, 
348    				}, 
349    			}, 
350    		}); 
351     
352    		var lightbox = new Swiper("#lightbox-swiper", { 
353    			spaceBetween: 10, 
354    			autoHeight: true, 
355    			observer: true, 
356    			observeSlideChildren: true, 
357    			keyboard: { 
358    				enabled: true, 
359    			}, 
360    			navigation: { 
361    				nextEl: ".swiper-button-next", 
362    				prevEl: ".swiper-button-prev", 
363    			}, 
364    			thumbs: { 
365    				swiper: thumbnails, 
366    			}, 
367    		}); 
368     
369    		$("#lightbox-modal").on("shown.bs.modal", function (e) { 
370    			lightbox.update(); 
371    			thumbnails.update(); 
372    			lightbox.slideTo($(e.relatedTarget).data("slider")); 
373    			lightbox.update(); 
374    		}); 
375     
376    		$("#lightbox-modal .swiper-wrapper").on("click", function (e) { 
377    			if ($(e.target).attr("class").includes("swiper-slide")) { 
378    				$("#lightbox-modal").modal("hide"); 
379
380    		}); 
381        }); 
382    </script> 
383</#if>