401° Festino di Santa Rosalia a luglio 2025

BREVE INTRODUZIONE TESTUALE AL FESTINO

Il 402° Festino di Santa Rosalia, patrona di Palermo, animerà il cuore della città la sera del 14 luglio 2026 e sarà accompagnato da un ricco calendario di eventi che anticipano l’anno europeo dei Normanni 2027 di cui sarà protagonista la città.

Medaglia di bronzo al Bea World Festival 2024 e medaglia d’oro al BEA Italia 2025, come miglior evento italiano culturale, il Festino di Santa Rosalia si inserisce ufficialmente tra i più attesi eventi al mondo e attrae ogni anno milioni di visitatori attraverso il suo tradizionale percorso.

Dal 1624, infatti, un corteo umano trasporta, a bordo di un Carro tematico, la Santuzza che liberò Palermo dalla peste da Palazzo dei Normanni fino a Porta Felice: quattro tappe narrative di canti, balli e musica.

“Viva Palermo e Santa Rosalia” è la voce di Palermo che si alza ai Quattro Canti attraverso un coro di liberazione e di festa.

Video: Preghiera a Rosalia di e con Salvo Piparo

SEZIONE: La Storia

LA STORIA DI SANTA ROSALIA E DEL FESTINO


Aggregatore Risorse

Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing:
==> structureService.getStructureAttrattoreKey()  [in template "20099#20135#153060" at line 11, column 39]

----
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: #assign attrattoreStructureKey = stru...  [in template "20099#20135#153060" at line 11, column 5]
----
1<#-- CAROSELLO MULTITIPO 05/07/2023--> 
2 
3<#assign showTemplate = false /> 
4<#assign emptyEntries = false /> 
5 
6<#assign structureService = serviceLocator.findService("it.inera.palermo.structure.service.StructureService")> 
7<#assign detailBaseUrl = structureService.getSiteBaseUrl(themeDisplay)> 
8 
9<#if entries?has_content>  
10    <#assign showTemplate = true /> 
11    <#assign attrattoreStructureKey = structureService.getStructureAttrattoreKey()> 
12    <#assign eventoStructureKey = structureService.getStructureEventoKey()> 
13    <#assign itinerarioStructureKey = structureService.getStructureItinerarioKey()> 
14    <#assign ricettaStructureKey = structureService.getStructureRicettaKey()> 
15    <#assign luogoStructureKey = structureService.getStructureLuogoKey()> 
16    <#assign categoriaStructureKey = "34431"> 
17     
18    <#assign layout = themeDisplay.getLayout()/> 
19    <#assign currentSite = themeDisplay.getSiteGroup()/> 
20    <#assign currentSiteUrl = currentSite.getPathFriendlyURL(false, themeDisplay)/> 
21    <#assign currentSiteFriendlyUrl = currentSite.getFriendlyURL()/> 
22 
23    <#assign count = 1/> 
24    <#list entries as curEntry> 
25        <#assign assetRenderer = curEntry.getAssetRenderer()/> 
26        <#if validator.isNotNull(assetRenderer)> 
27            <#assign className = assetRenderer.getClassName() /> 
28            <#if className == "com.liferay.journal.model.JournalArticle"> 
29                <#assign ja = assetRenderer.getArticle() /> 
30                <#assign structureId = ja.getStructureId() /> 
31                 
32                <#if showTemplate && structureId != attrattoreStructureKey && structureId != eventoStructureKey  
33                	&& structureId != itinerarioStructureKey && structureId != ricettaStructureKey  
34                	&& structureId != luogoStructureKey && structureId != categoriaStructureKey> 
35                    <#assign showTemplate = false /> 
36                </#if> 
37            <#else> 
38                <#assign showTemplate = false /> 
39            </#if> 
40        <#else> 
41            <#assign showTemplate = false /> 
42        </#if> 
43    </#list> 
44<#else> 
45    <#assign emptyEntries = true /> 
46</#if>  
47 
48<#if !emptyEntries>  
49    <#if showTemplate> 
50    <div class="container mb-5"> 
51        <div class="row"> 
52        <div class="col-12"> 
53            <div class="tab-content category-offers" id="offer-tab-content"> 
54            <div class="tab-pane fade show active" id="visite-guidate" role="tabpanel" aria-labelledby="visite-guidate-label"> 
55                <div class="row"> 
56                <div class="col-12"> 
57                    <div class="card-carousel owl-carousel std-card-carousel" data-carousel="{&quot;nav&quot;:true,&quot;navText&quot;:[&quot;&lt;i class='icon-angle-left'&gt;&lt;/i&gt;&quot;,&quot;&lt;i class='icon-angle-right'&gt;&lt;/i&gt;&quot;],&quot;autoplay&quot;:false,&quot;autoplayHoverPause&quot;:true,&quot;responsiveClass&quot;:true,&quot;responsive&quot;:{&quot;0&quot;:{&quot;items&quot;:1,&quot;slideBy&quot;:1},&quot;480&quot;:{&quot;items&quot;:2,&quot;slideBy&quot;:2},&quot;768&quot;:{&quot;items&quot;:3,&quot;slideBy&quot;:3}}}"> 
58                     
59                        <#list entries as curEntry> 
60                            <#assign assetRenderer = curEntry.getAssetRenderer()/> 
61                            <#assign ja = assetRenderer.getArticle() /> 
62                            <#assign structureId = ja.getStructureId() /> 
63                            <#assign langId = themeDisplay.getLanguageId() /> 
64                            <#assign contentByLocale = ja.getContentByLocale(themeDisplay.getLanguageId()) /> 
65                             
66						    <#assign colorebordo = "border-bottom-yellow"> 
67						    <#assign subpage = "luogo"> 
68                            <#assign destinationPage = "" /> 
69                            <#assign url = ""> 
70                            <#assign textAltImg = "" /> 
71                            <#assign titolo = ""> 
72                            <#assign sottotitolo_abstract = ""> 
73 
74                            <#if structureId == categoriaStructureKey> 
75 
76                                <#assign document = saxReaderUtil.read(contentByLocale) > 
77                                <#assign rootElement = document.getRootElement()> 
78                                 
79                                <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")> 
80                                <#assign titolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 
81                                 
82                                <#assign xPathSottotitolo = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")> 
83                                <#assign sottotitolo_abstract = xPathSottotitolo.selectSingleNode(rootElement).getStringValue()> 
84                                 
85                                <#assign colorebordo = "border-bottom-yellow"> 
86                                <#assign xPathColorBorder = saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']")> 
87                                <#if xPathColorBorder?? && xPathColorBorder?has_content  
88                                    && saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']")?has_content 
89                                    && (saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue())?? 
90                                    && (saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue())?has_content> 
91                                <#assign colorebordo = saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue()> 
92                                </#if> 
93                                 
94                                <#assign xPathImmagine = saxReaderUtil.createXPath("dynamic-element[@name='immagine']")> 
95                                <#if xPathImmagine?? && xPathImmagine?has_content > 
96                                    <#assign imgNews = xPathImmagine.selectSingleNode(rootElement).getStringValue()> 
97                                    <#if imgNews?? && imgNews?has_content && (imgNews?length > 1)> 
98                                     
99                                    <#attempt> 
100                                        <#assign imgJson = jsonFactoryUtil.createJSONObject(imgNews)> 
101                                        <#assign url = "/documents/"+ imgJson.groupId +"/" +imgJson.classPK +"/"+ imgJson.title +"/"+imgJson.uuid + "?width=600" > 
102                                    <#recover>  
103                                    </#attempt> 
104                                    </#if> 
105                                </#if> 
106                                 
107                                <#assign xPathTextAltImg = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine']")> 
108                                <#assign textAltImg = xPathTextAltImg.selectSingleNode(rootElement).getStringValue()> 
109                                 
110                                <#assign xPathLinkAPagina = saxReaderUtil.createXPath("dynamic-element[@name='link_a_pagina']")> 
111                                <#assign linkToPage = "" > 
112                                 
113                                <#if xPathLinkAPagina?? > 
114                                    <#if xPathLinkAPagina?has_content > 
115                                        <#assign linkAPagina = xPathLinkAPagina.selectSingleNode(rootElement).getStringValue() > 
116                                        <#assign linkAPaginaSplitted = linkAPagina?split("@") > 
117                                        <#assign layoutIdPage = linkAPaginaSplitted?first > 
118                                        <#assign layoutIdPage = getterUtil.getLong(layoutIdPage) > 
119                                        <#assign groupIdPage = linkAPaginaSplitted?last > 
120                                        <#assign groupIdPage = getterUtil.getLong(groupIdPage) > 
121                                         
122                                        <#if layoutIdPage != 0 > 
123                                            <#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")> 
124                                            <#assign contentPage = ""> 
125                                            <#attempt> 
126                                            <#assign contentPage = layoutLocalService.getLayout(groupIdPage, false, layoutIdPage ) > 
127                                            <#if contentPage?? > 
128                                                <#assign linkToPage = contentPage.getFriendlyURL(locale) > 
129                                                <#assign linkToPage = currentSiteUrl + currentSiteFriendlyUrl + linkToPage?trim> 
130                                            </#if> 
131                                            <#recover> 
132                                            </#attempt> 
133                                        </#if> 
134                                         
135                                    </#if> 
136                                </#if> 
137                                 
138                                <#if linkToPage?? && (linkToPage?length == 0 || linkToPage?length == 1) > 
139                                    <#assign xPathLinkEsterno = saxReaderUtil.createXPath("dynamic-element[@name='link_esterno']")> 
140                                    <#assign linkToPage = xPathLinkEsterno.selectSingleNode(rootElement).getStringValue() > 
141                                    <#assign linkToPage = linkToPage?trim> 
142                                </#if> 
143                             
144                                <#if linkToPage?? && (linkToPage?length == 0 || linkToPage?length == 1) > 
145                                    <#assign xPathLinkInterno = saxReaderUtil.createXPath("dynamic-element[@name='link_interno']")> 
146                                    <#assign linkToPage = xPathLinkInterno.selectSingleNode(rootElement).getStringValue() > 
147                                    <#assign linkToPage = linkToPage?trim> 
148                                </#if>  
149                                <#assign destinationPage = linkToPage> 
150                            <#else> 
151                                <#if structureId == attrattoreStructureKey> 
152                                <#assign subpage = "attrazione"> 
153                                <#elseif structureId == eventoStructureKey> 
154                                <#assign subpage = "evento"> 
155                                <#elseif structureId == itinerarioStructureKey> 
156                                <#assign subpage = "itinerario"> 
157                                <#elseif structureId == ricettaStructureKey> 
158                                <#assign subpage = "ricetta"> 
159                                <#elseif structureId == luogoStructureKey> 
160                                <#assign subpage = "luogo"> 
161                                <#else> 
162                                </#if> 
163                                <#--CONTENT BY DEFAULT LOCALE--> 
164                                <#attempt> 
165                                    <#assign contentByDefaultLocale = ja.getContentByLocale(localeUtil.getDefault()) /> 
166                                    <#assign documentByDefaultLocale = saxReaderUtil.read(contentByDefaultLocale) > 
167                                    <#assign rootElementByDefaultLocale = documentByDefaultLocale.getRootElement()> 
168                                        <#assign xPathImmagineListaByDefaultLocale = saxReaderUtil.createXPath("dynamic-element[@name='immagine_lista']")> 
169                                        <#if xPathImmagineListaByDefaultLocale?? && xPathImmagineListaByDefaultLocale?has_content> 
170                                            <#if xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale)?? && xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale)?has_content> 
171                                                <#assign immagineListaByDefaultLocale = xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale).getStringValue()> 
172                                            </#if> 
173                                        </#if> 
174                                        <#assign xPathImmagineBannerByDefaultLocale = saxReaderUtil.createXPath("dynamic-element[@name='banner']")> 
175                                        <#if xPathImmagineBannerByDefaultLocale?? && xPathImmagineBannerByDefaultLocale?has_content> 
176	                                        <#assign immagineBannerByDefaultLocale = xPathImmagineBannerByDefaultLocale.selectSingleNode(rootElementByDefaultLocale).getStringValue()>                            
177	                                        <#if immagineListaByDefaultLocale?trim?has_content> 
178	                                            <#assign immagineByDefaultLocale = immagineListaByDefaultLocale> 
179	                                        <#else> 
180	                                            <#assign immagineByDefaultLocale = immagineBannerByDefaultLocale> 
181	                                        </#if> 
182                                        </#if> 
183                                        <#if validator.isNotNull(immagineByDefaultLocale)> 
184                                            <#attempt> 
185                                                <#assign imgJsonByDefaultLocale = jsonFactoryUtil.createJSONObject(immagineByDefaultLocale)> 
186                                                <#assign url = "/documents/"+ imgJsonByDefaultLocale.groupId +"/" +imgJsonByDefaultLocale.classPK +"/"+ imgJsonByDefaultLocale.title +"/"+imgJsonByDefaultLocale.uuid + "?width=600" > 
187                                            <#recover> 
188                                                <#assign url = ""> 
189                                            </#attempt> 
190                                        </#if> 
191                                <#recover> 
192                                </#attempt> 
193                                <#--CONTENT BY DEFAULT LOCALE--> 
194 
195                                <#assign urlTitle = ja.getUrlTitle() /> 
196                                <#assign document = saxReaderUtil.read(contentByLocale) > 
197                                <#assign rootElement = document.getRootElement()> 
198                                <#assign xPathTitolo = "" /> 
199                                <#assign xPathSottotitolo_abstract = "" /> 
200                                <#assign xPathImmagineBanner = "" /> 
201                                <#assign xPathTextAltImg = "" /> 
202                                <#assign immagineLista = ""> 
203                                <#assign textAltImgLista = ""> 
204                                <#assign immagine = "">   
205                                <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")> 
206                                <#assign xPathSottotitolo_abstract = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")> 
207                                 
208                                <#assign xPathImmagineLista = saxReaderUtil.createXPath("dynamic-element[@name='immagine_lista']")> 
209                                <#if xPathImmagineLista?? && xPathImmagineLista?has_content> 
210                                    <#if xPathImmagineLista.selectSingleNode(rootElement)?? && xPathImmagineLista.selectSingleNode(rootElement)?has_content> 
211                                        <#assign immagineLista = xPathImmagineLista.selectSingleNode(rootElement).getStringValue()> 
212                                    </#if> 
213                                </#if> 
214                                <#assign xPathTextAltImgLista = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine_lista']")> 
215                                <#if xPathTextAltImgLista?? && xPathTextAltImgLista?has_content> 
216                                    <#if xPathTextAltImgLista.selectSingleNode(rootElement)?? && xPathTextAltImgLista.selectSingleNode(rootElement)?has_content> 
217                                        <#assign textAltImgLista = xPathTextAltImgLista.selectSingleNode(rootElement).getStringValue()> 
218                                    </#if> 
219                                </#if> 
220 
221                                <#assign xPathImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='banner']")> 
222                                <#assign xPathTextAltImg = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_banner']")> 
223                                <#assign textAltImg = xPathTextAltImg.selectSingleNode(rootElement).getStringValue()> 
224                                <#assign destinationPage = "${detailBaseUrl}/search/-/search/${subpage}/${urlTitle}" /> 
225                                <#assign titolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 
226                                <#assign sottotitolo_abstract = xPathSottotitolo_abstract.selectSingleNode(rootElement).getStringValue()>    
227                                 
228                                <#assign immagineBanner = xPathImmagineBanner.selectSingleNode(rootElement).getStringValue()> 
229                                <#if !textAltImg?has_content> 
230                                    <#assign textAltImg = titolo> 
231                                </#if> 
232                                                                 
233                                <#if immagineLista?trim?has_content> 
234                                    <#assign immagine = immagineLista> 
235                                    <#assign textAltImg = textAltImgLista> 
236                                <#else> 
237                                    <#assign immagine = immagineBanner> 
238                                </#if> 
239 
240                                <#if validator.isNotNull(immagine)> 
241                                    <#attempt> 
242                                        <#assign imgJson = jsonFactoryUtil.createJSONObject(immagine)> 
243                                        <#assign url = "/documents/"+ imgJson.groupId +"/" +imgJson.classPK +"/"+ imgJson.title +"/"+imgJson.uuid + "?width=600" > 
244                                    <#recover> 
245                                    </#attempt> 
246                                </#if> 
247                            </#if> 
248                            <div class="card-container col-12 palermo-carousel-item ${colorebordo}"> 
249                                <div class="row"> 
250                                    <div class="card"> 
251                                        <a href="${destinationPage}"> 
252                                            <img class="card-img-top" src="${url}" alt="${textAltImg}"> 
253                                            <div class="card-body"> 
254                                                <h3 class="card-title">${titolo} 
255                                                </h3> 
256                                                <p class="card-text"> 
257                                                    ${sottotitolo_abstract} 
258                                                </p> 
259                                            </div> 
260                                        </a> 
261                                    </div> 
262                                </div> 
263                            </div> 
264                        </#list> 
265                    </div> 
266                </div> 
267                </div> 
268            </div> 
269            </div> 
270        </div> 
271        </div> 
272    </div> 
273    <#else> 
274        <div style="border: 1px solid red; padding:20px;"> 
275            <h3 style="color: red;">Questo template supporta solo contenuti di tipo Web Content con struttura attrattori, eventi, itinerari, ricette, luoghi e proposte di viaggio.</h3> 
276            <h3 style="color: red;">Configurare opportunamente l'aggregatore risorse</h3> 
277        </div> 
278    </#if> 
279    
280</#if> 

Aggregatore Risorse

Aggregatore Risorse

Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing:
==> structureService.getStructureAttrattoreKey()  [in template "20099#20135#153060" at line 11, column 39]

----
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: #assign attrattoreStructureKey = stru...  [in template "20099#20135#153060" at line 11, column 5]
----
1<#-- CAROSELLO MULTITIPO 05/07/2023--> 
2 
3<#assign showTemplate = false /> 
4<#assign emptyEntries = false /> 
5 
6<#assign structureService = serviceLocator.findService("it.inera.palermo.structure.service.StructureService")> 
7<#assign detailBaseUrl = structureService.getSiteBaseUrl(themeDisplay)> 
8 
9<#if entries?has_content>  
10    <#assign showTemplate = true /> 
11    <#assign attrattoreStructureKey = structureService.getStructureAttrattoreKey()> 
12    <#assign eventoStructureKey = structureService.getStructureEventoKey()> 
13    <#assign itinerarioStructureKey = structureService.getStructureItinerarioKey()> 
14    <#assign ricettaStructureKey = structureService.getStructureRicettaKey()> 
15    <#assign luogoStructureKey = structureService.getStructureLuogoKey()> 
16    <#assign categoriaStructureKey = "34431"> 
17     
18    <#assign layout = themeDisplay.getLayout()/> 
19    <#assign currentSite = themeDisplay.getSiteGroup()/> 
20    <#assign currentSiteUrl = currentSite.getPathFriendlyURL(false, themeDisplay)/> 
21    <#assign currentSiteFriendlyUrl = currentSite.getFriendlyURL()/> 
22 
23    <#assign count = 1/> 
24    <#list entries as curEntry> 
25        <#assign assetRenderer = curEntry.getAssetRenderer()/> 
26        <#if validator.isNotNull(assetRenderer)> 
27            <#assign className = assetRenderer.getClassName() /> 
28            <#if className == "com.liferay.journal.model.JournalArticle"> 
29                <#assign ja = assetRenderer.getArticle() /> 
30                <#assign structureId = ja.getStructureId() /> 
31                 
32                <#if showTemplate && structureId != attrattoreStructureKey && structureId != eventoStructureKey  
33                	&& structureId != itinerarioStructureKey && structureId != ricettaStructureKey  
34                	&& structureId != luogoStructureKey && structureId != categoriaStructureKey> 
35                    <#assign showTemplate = false /> 
36                </#if> 
37            <#else> 
38                <#assign showTemplate = false /> 
39            </#if> 
40        <#else> 
41            <#assign showTemplate = false /> 
42        </#if> 
43    </#list> 
44<#else> 
45    <#assign emptyEntries = true /> 
46</#if>  
47 
48<#if !emptyEntries>  
49    <#if showTemplate> 
50    <div class="container mb-5"> 
51        <div class="row"> 
52        <div class="col-12"> 
53            <div class="tab-content category-offers" id="offer-tab-content"> 
54            <div class="tab-pane fade show active" id="visite-guidate" role="tabpanel" aria-labelledby="visite-guidate-label"> 
55                <div class="row"> 
56                <div class="col-12"> 
57                    <div class="card-carousel owl-carousel std-card-carousel" data-carousel="{&quot;nav&quot;:true,&quot;navText&quot;:[&quot;&lt;i class='icon-angle-left'&gt;&lt;/i&gt;&quot;,&quot;&lt;i class='icon-angle-right'&gt;&lt;/i&gt;&quot;],&quot;autoplay&quot;:false,&quot;autoplayHoverPause&quot;:true,&quot;responsiveClass&quot;:true,&quot;responsive&quot;:{&quot;0&quot;:{&quot;items&quot;:1,&quot;slideBy&quot;:1},&quot;480&quot;:{&quot;items&quot;:2,&quot;slideBy&quot;:2},&quot;768&quot;:{&quot;items&quot;:3,&quot;slideBy&quot;:3}}}"> 
58                     
59                        <#list entries as curEntry> 
60                            <#assign assetRenderer = curEntry.getAssetRenderer()/> 
61                            <#assign ja = assetRenderer.getArticle() /> 
62                            <#assign structureId = ja.getStructureId() /> 
63                            <#assign langId = themeDisplay.getLanguageId() /> 
64                            <#assign contentByLocale = ja.getContentByLocale(themeDisplay.getLanguageId()) /> 
65                             
66						    <#assign colorebordo = "border-bottom-yellow"> 
67						    <#assign subpage = "luogo"> 
68                            <#assign destinationPage = "" /> 
69                            <#assign url = ""> 
70                            <#assign textAltImg = "" /> 
71                            <#assign titolo = ""> 
72                            <#assign sottotitolo_abstract = ""> 
73 
74                            <#if structureId == categoriaStructureKey> 
75 
76                                <#assign document = saxReaderUtil.read(contentByLocale) > 
77                                <#assign rootElement = document.getRootElement()> 
78                                 
79                                <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")> 
80                                <#assign titolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 
81                                 
82                                <#assign xPathSottotitolo = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")> 
83                                <#assign sottotitolo_abstract = xPathSottotitolo.selectSingleNode(rootElement).getStringValue()> 
84                                 
85                                <#assign colorebordo = "border-bottom-yellow"> 
86                                <#assign xPathColorBorder = saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']")> 
87                                <#if xPathColorBorder?? && xPathColorBorder?has_content  
88                                    && saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']")?has_content 
89                                    && (saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue())?? 
90                                    && (saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue())?has_content> 
91                                <#assign colorebordo = saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue()> 
92                                </#if> 
93                                 
94                                <#assign xPathImmagine = saxReaderUtil.createXPath("dynamic-element[@name='immagine']")> 
95                                <#if xPathImmagine?? && xPathImmagine?has_content > 
96                                    <#assign imgNews = xPathImmagine.selectSingleNode(rootElement).getStringValue()> 
97                                    <#if imgNews?? && imgNews?has_content && (imgNews?length > 1)> 
98                                     
99                                    <#attempt> 
100                                        <#assign imgJson = jsonFactoryUtil.createJSONObject(imgNews)> 
101                                        <#assign url = "/documents/"+ imgJson.groupId +"/" +imgJson.classPK +"/"+ imgJson.title +"/"+imgJson.uuid + "?width=600" > 
102                                    <#recover>  
103                                    </#attempt> 
104                                    </#if> 
105                                </#if> 
106                                 
107                                <#assign xPathTextAltImg = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine']")> 
108                                <#assign textAltImg = xPathTextAltImg.selectSingleNode(rootElement).getStringValue()> 
109                                 
110                                <#assign xPathLinkAPagina = saxReaderUtil.createXPath("dynamic-element[@name='link_a_pagina']")> 
111                                <#assign linkToPage = "" > 
112                                 
113                                <#if xPathLinkAPagina?? > 
114                                    <#if xPathLinkAPagina?has_content > 
115                                        <#assign linkAPagina = xPathLinkAPagina.selectSingleNode(rootElement).getStringValue() > 
116                                        <#assign linkAPaginaSplitted = linkAPagina?split("@") > 
117                                        <#assign layoutIdPage = linkAPaginaSplitted?first > 
118                                        <#assign layoutIdPage = getterUtil.getLong(layoutIdPage) > 
119                                        <#assign groupIdPage = linkAPaginaSplitted?last > 
120                                        <#assign groupIdPage = getterUtil.getLong(groupIdPage) > 
121                                         
122                                        <#if layoutIdPage != 0 > 
123                                            <#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")> 
124                                            <#assign contentPage = ""> 
125                                            <#attempt> 
126                                            <#assign contentPage = layoutLocalService.getLayout(groupIdPage, false, layoutIdPage ) > 
127                                            <#if contentPage?? > 
128                                                <#assign linkToPage = contentPage.getFriendlyURL(locale) > 
129                                                <#assign linkToPage = currentSiteUrl + currentSiteFriendlyUrl + linkToPage?trim> 
130                                            </#if> 
131                                            <#recover> 
132                                            </#attempt> 
133                                        </#if> 
134                                         
135                                    </#if> 
136                                </#if> 
137                                 
138                                <#if linkToPage?? && (linkToPage?length == 0 || linkToPage?length == 1) > 
139                                    <#assign xPathLinkEsterno = saxReaderUtil.createXPath("dynamic-element[@name='link_esterno']")> 
140                                    <#assign linkToPage = xPathLinkEsterno.selectSingleNode(rootElement).getStringValue() > 
141                                    <#assign linkToPage = linkToPage?trim> 
142                                </#if> 
143                             
144                                <#if linkToPage?? && (linkToPage?length == 0 || linkToPage?length == 1) > 
145                                    <#assign xPathLinkInterno = saxReaderUtil.createXPath("dynamic-element[@name='link_interno']")> 
146                                    <#assign linkToPage = xPathLinkInterno.selectSingleNode(rootElement).getStringValue() > 
147                                    <#assign linkToPage = linkToPage?trim> 
148                                </#if>  
149                                <#assign destinationPage = linkToPage> 
150                            <#else> 
151                                <#if structureId == attrattoreStructureKey> 
152                                <#assign subpage = "attrazione"> 
153                                <#elseif structureId == eventoStructureKey> 
154                                <#assign subpage = "evento"> 
155                                <#elseif structureId == itinerarioStructureKey> 
156                                <#assign subpage = "itinerario"> 
157                                <#elseif structureId == ricettaStructureKey> 
158                                <#assign subpage = "ricetta"> 
159                                <#elseif structureId == luogoStructureKey> 
160                                <#assign subpage = "luogo"> 
161                                <#else> 
162                                </#if> 
163                                <#--CONTENT BY DEFAULT LOCALE--> 
164                                <#attempt> 
165                                    <#assign contentByDefaultLocale = ja.getContentByLocale(localeUtil.getDefault()) /> 
166                                    <#assign documentByDefaultLocale = saxReaderUtil.read(contentByDefaultLocale) > 
167                                    <#assign rootElementByDefaultLocale = documentByDefaultLocale.getRootElement()> 
168                                        <#assign xPathImmagineListaByDefaultLocale = saxReaderUtil.createXPath("dynamic-element[@name='immagine_lista']")> 
169                                        <#if xPathImmagineListaByDefaultLocale?? && xPathImmagineListaByDefaultLocale?has_content> 
170                                            <#if xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale)?? && xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale)?has_content> 
171                                                <#assign immagineListaByDefaultLocale = xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale).getStringValue()> 
172                                            </#if> 
173                                        </#if> 
174                                        <#assign xPathImmagineBannerByDefaultLocale = saxReaderUtil.createXPath("dynamic-element[@name='banner']")> 
175                                        <#if xPathImmagineBannerByDefaultLocale?? && xPathImmagineBannerByDefaultLocale?has_content> 
176	                                        <#assign immagineBannerByDefaultLocale = xPathImmagineBannerByDefaultLocale.selectSingleNode(rootElementByDefaultLocale).getStringValue()>                            
177	                                        <#if immagineListaByDefaultLocale?trim?has_content> 
178	                                            <#assign immagineByDefaultLocale = immagineListaByDefaultLocale> 
179	                                        <#else> 
180	                                            <#assign immagineByDefaultLocale = immagineBannerByDefaultLocale> 
181	                                        </#if> 
182                                        </#if> 
183                                        <#if validator.isNotNull(immagineByDefaultLocale)> 
184                                            <#attempt> 
185                                                <#assign imgJsonByDefaultLocale = jsonFactoryUtil.createJSONObject(immagineByDefaultLocale)> 
186                                                <#assign url = "/documents/"+ imgJsonByDefaultLocale.groupId +"/" +imgJsonByDefaultLocale.classPK +"/"+ imgJsonByDefaultLocale.title +"/"+imgJsonByDefaultLocale.uuid + "?width=600" > 
187                                            <#recover> 
188                                                <#assign url = ""> 
189                                            </#attempt> 
190                                        </#if> 
191                                <#recover> 
192                                </#attempt> 
193                                <#--CONTENT BY DEFAULT LOCALE--> 
194 
195                                <#assign urlTitle = ja.getUrlTitle() /> 
196                                <#assign document = saxReaderUtil.read(contentByLocale) > 
197                                <#assign rootElement = document.getRootElement()> 
198                                <#assign xPathTitolo = "" /> 
199                                <#assign xPathSottotitolo_abstract = "" /> 
200                                <#assign xPathImmagineBanner = "" /> 
201                                <#assign xPathTextAltImg = "" /> 
202                                <#assign immagineLista = ""> 
203                                <#assign textAltImgLista = ""> 
204                                <#assign immagine = "">   
205                                <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")> 
206                                <#assign xPathSottotitolo_abstract = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")> 
207                                 
208                                <#assign xPathImmagineLista = saxReaderUtil.createXPath("dynamic-element[@name='immagine_lista']")> 
209                                <#if xPathImmagineLista?? && xPathImmagineLista?has_content> 
210                                    <#if xPathImmagineLista.selectSingleNode(rootElement)?? && xPathImmagineLista.selectSingleNode(rootElement)?has_content> 
211                                        <#assign immagineLista = xPathImmagineLista.selectSingleNode(rootElement).getStringValue()> 
212                                    </#if> 
213                                </#if> 
214                                <#assign xPathTextAltImgLista = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine_lista']")> 
215                                <#if xPathTextAltImgLista?? && xPathTextAltImgLista?has_content> 
216                                    <#if xPathTextAltImgLista.selectSingleNode(rootElement)?? && xPathTextAltImgLista.selectSingleNode(rootElement)?has_content> 
217                                        <#assign textAltImgLista = xPathTextAltImgLista.selectSingleNode(rootElement).getStringValue()> 
218                                    </#if> 
219                                </#if> 
220 
221                                <#assign xPathImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='banner']")> 
222                                <#assign xPathTextAltImg = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_banner']")> 
223                                <#assign textAltImg = xPathTextAltImg.selectSingleNode(rootElement).getStringValue()> 
224                                <#assign destinationPage = "${detailBaseUrl}/search/-/search/${subpage}/${urlTitle}" /> 
225                                <#assign titolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 
226                                <#assign sottotitolo_abstract = xPathSottotitolo_abstract.selectSingleNode(rootElement).getStringValue()>    
227                                 
228                                <#assign immagineBanner = xPathImmagineBanner.selectSingleNode(rootElement).getStringValue()> 
229                                <#if !textAltImg?has_content> 
230                                    <#assign textAltImg = titolo> 
231                                </#if> 
232                                                                 
233                                <#if immagineLista?trim?has_content> 
234                                    <#assign immagine = immagineLista> 
235                                    <#assign textAltImg = textAltImgLista> 
236                                <#else> 
237                                    <#assign immagine = immagineBanner> 
238                                </#if> 
239 
240                                <#if validator.isNotNull(immagine)> 
241                                    <#attempt> 
242                                        <#assign imgJson = jsonFactoryUtil.createJSONObject(immagine)> 
243                                        <#assign url = "/documents/"+ imgJson.groupId +"/" +imgJson.classPK +"/"+ imgJson.title +"/"+imgJson.uuid + "?width=600" > 
244                                    <#recover> 
245                                    </#attempt> 
246                                </#if> 
247                            </#if> 
248                            <div class="card-container col-12 palermo-carousel-item ${colorebordo}"> 
249                                <div class="row"> 
250                                    <div class="card"> 
251                                        <a href="${destinationPage}"> 
252                                            <img class="card-img-top" src="${url}" alt="${textAltImg}"> 
253                                            <div class="card-body"> 
254                                                <h3 class="card-title">${titolo} 
255                                                </h3> 
256                                                <p class="card-text"> 
257                                                    ${sottotitolo_abstract} 
258                                                </p> 
259                                            </div> 
260                                        </a> 
261                                    </div> 
262                                </div> 
263                            </div> 
264                        </#list> 
265                    </div> 
266                </div> 
267                </div> 
268            </div> 
269            </div> 
270        </div> 
271        </div> 
272    </div> 
273    <#else> 
274        <div style="border: 1px solid red; padding:20px;"> 
275            <h3 style="color: red;">Questo template supporta solo contenuti di tipo Web Content con struttura attrattori, eventi, itinerari, ricette, luoghi e proposte di viaggio.</h3> 
276            <h3 style="color: red;">Configurare opportunamente l'aggregatore risorse</h3> 
277        </div> 
278    </#if> 
279    
280</#if> 

Aggregatore Risorse

Aggregatore Risorse

Aggregatore Risorse

Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing:
==> structureService.getStructureAttrattoreKey()  [in template "20099#20135#153060" at line 11, column 39]

----
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: #assign attrattoreStructureKey = stru...  [in template "20099#20135#153060" at line 11, column 5]
----
1<#-- CAROSELLO MULTITIPO 05/07/2023--> 
2 
3<#assign showTemplate = false /> 
4<#assign emptyEntries = false /> 
5 
6<#assign structureService = serviceLocator.findService("it.inera.palermo.structure.service.StructureService")> 
7<#assign detailBaseUrl = structureService.getSiteBaseUrl(themeDisplay)> 
8 
9<#if entries?has_content>  
10    <#assign showTemplate = true /> 
11    <#assign attrattoreStructureKey = structureService.getStructureAttrattoreKey()> 
12    <#assign eventoStructureKey = structureService.getStructureEventoKey()> 
13    <#assign itinerarioStructureKey = structureService.getStructureItinerarioKey()> 
14    <#assign ricettaStructureKey = structureService.getStructureRicettaKey()> 
15    <#assign luogoStructureKey = structureService.getStructureLuogoKey()> 
16    <#assign categoriaStructureKey = "34431"> 
17     
18    <#assign layout = themeDisplay.getLayout()/> 
19    <#assign currentSite = themeDisplay.getSiteGroup()/> 
20    <#assign currentSiteUrl = currentSite.getPathFriendlyURL(false, themeDisplay)/> 
21    <#assign currentSiteFriendlyUrl = currentSite.getFriendlyURL()/> 
22 
23    <#assign count = 1/> 
24    <#list entries as curEntry> 
25        <#assign assetRenderer = curEntry.getAssetRenderer()/> 
26        <#if validator.isNotNull(assetRenderer)> 
27            <#assign className = assetRenderer.getClassName() /> 
28            <#if className == "com.liferay.journal.model.JournalArticle"> 
29                <#assign ja = assetRenderer.getArticle() /> 
30                <#assign structureId = ja.getStructureId() /> 
31                 
32                <#if showTemplate && structureId != attrattoreStructureKey && structureId != eventoStructureKey  
33                	&& structureId != itinerarioStructureKey && structureId != ricettaStructureKey  
34                	&& structureId != luogoStructureKey && structureId != categoriaStructureKey> 
35                    <#assign showTemplate = false /> 
36                </#if> 
37            <#else> 
38                <#assign showTemplate = false /> 
39            </#if> 
40        <#else> 
41            <#assign showTemplate = false /> 
42        </#if> 
43    </#list> 
44<#else> 
45    <#assign emptyEntries = true /> 
46</#if>  
47 
48<#if !emptyEntries>  
49    <#if showTemplate> 
50    <div class="container mb-5"> 
51        <div class="row"> 
52        <div class="col-12"> 
53            <div class="tab-content category-offers" id="offer-tab-content"> 
54            <div class="tab-pane fade show active" id="visite-guidate" role="tabpanel" aria-labelledby="visite-guidate-label"> 
55                <div class="row"> 
56                <div class="col-12"> 
57                    <div class="card-carousel owl-carousel std-card-carousel" data-carousel="{&quot;nav&quot;:true,&quot;navText&quot;:[&quot;&lt;i class='icon-angle-left'&gt;&lt;/i&gt;&quot;,&quot;&lt;i class='icon-angle-right'&gt;&lt;/i&gt;&quot;],&quot;autoplay&quot;:false,&quot;autoplayHoverPause&quot;:true,&quot;responsiveClass&quot;:true,&quot;responsive&quot;:{&quot;0&quot;:{&quot;items&quot;:1,&quot;slideBy&quot;:1},&quot;480&quot;:{&quot;items&quot;:2,&quot;slideBy&quot;:2},&quot;768&quot;:{&quot;items&quot;:3,&quot;slideBy&quot;:3}}}"> 
58                     
59                        <#list entries as curEntry> 
60                            <#assign assetRenderer = curEntry.getAssetRenderer()/> 
61                            <#assign ja = assetRenderer.getArticle() /> 
62                            <#assign structureId = ja.getStructureId() /> 
63                            <#assign langId = themeDisplay.getLanguageId() /> 
64                            <#assign contentByLocale = ja.getContentByLocale(themeDisplay.getLanguageId()) /> 
65                             
66						    <#assign colorebordo = "border-bottom-yellow"> 
67						    <#assign subpage = "luogo"> 
68                            <#assign destinationPage = "" /> 
69                            <#assign url = ""> 
70                            <#assign textAltImg = "" /> 
71                            <#assign titolo = ""> 
72                            <#assign sottotitolo_abstract = ""> 
73 
74                            <#if structureId == categoriaStructureKey> 
75 
76                                <#assign document = saxReaderUtil.read(contentByLocale) > 
77                                <#assign rootElement = document.getRootElement()> 
78                                 
79                                <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")> 
80                                <#assign titolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 
81                                 
82                                <#assign xPathSottotitolo = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")> 
83                                <#assign sottotitolo_abstract = xPathSottotitolo.selectSingleNode(rootElement).getStringValue()> 
84                                 
85                                <#assign colorebordo = "border-bottom-yellow"> 
86                                <#assign xPathColorBorder = saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']")> 
87                                <#if xPathColorBorder?? && xPathColorBorder?has_content  
88                                    && saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']")?has_content 
89                                    && (saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue())?? 
90                                    && (saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue())?has_content> 
91                                <#assign colorebordo = saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue()> 
92                                </#if> 
93                                 
94                                <#assign xPathImmagine = saxReaderUtil.createXPath("dynamic-element[@name='immagine']")> 
95                                <#if xPathImmagine?? && xPathImmagine?has_content > 
96                                    <#assign imgNews = xPathImmagine.selectSingleNode(rootElement).getStringValue()> 
97                                    <#if imgNews?? && imgNews?has_content && (imgNews?length > 1)> 
98                                     
99                                    <#attempt> 
100                                        <#assign imgJson = jsonFactoryUtil.createJSONObject(imgNews)> 
101                                        <#assign url = "/documents/"+ imgJson.groupId +"/" +imgJson.classPK +"/"+ imgJson.title +"/"+imgJson.uuid + "?width=600" > 
102                                    <#recover>  
103                                    </#attempt> 
104                                    </#if> 
105                                </#if> 
106                                 
107                                <#assign xPathTextAltImg = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine']")> 
108                                <#assign textAltImg = xPathTextAltImg.selectSingleNode(rootElement).getStringValue()> 
109                                 
110                                <#assign xPathLinkAPagina = saxReaderUtil.createXPath("dynamic-element[@name='link_a_pagina']")> 
111                                <#assign linkToPage = "" > 
112                                 
113                                <#if xPathLinkAPagina?? > 
114                                    <#if xPathLinkAPagina?has_content > 
115                                        <#assign linkAPagina = xPathLinkAPagina.selectSingleNode(rootElement).getStringValue() > 
116                                        <#assign linkAPaginaSplitted = linkAPagina?split("@") > 
117                                        <#assign layoutIdPage = linkAPaginaSplitted?first > 
118                                        <#assign layoutIdPage = getterUtil.getLong(layoutIdPage) > 
119                                        <#assign groupIdPage = linkAPaginaSplitted?last > 
120                                        <#assign groupIdPage = getterUtil.getLong(groupIdPage) > 
121                                         
122                                        <#if layoutIdPage != 0 > 
123                                            <#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")> 
124                                            <#assign contentPage = ""> 
125                                            <#attempt> 
126                                            <#assign contentPage = layoutLocalService.getLayout(groupIdPage, false, layoutIdPage ) > 
127                                            <#if contentPage?? > 
128                                                <#assign linkToPage = contentPage.getFriendlyURL(locale) > 
129                                                <#assign linkToPage = currentSiteUrl + currentSiteFriendlyUrl + linkToPage?trim> 
130                                            </#if> 
131                                            <#recover> 
132                                            </#attempt> 
133                                        </#if> 
134                                         
135                                    </#if> 
136                                </#if> 
137                                 
138                                <#if linkToPage?? && (linkToPage?length == 0 || linkToPage?length == 1) > 
139                                    <#assign xPathLinkEsterno = saxReaderUtil.createXPath("dynamic-element[@name='link_esterno']")> 
140                                    <#assign linkToPage = xPathLinkEsterno.selectSingleNode(rootElement).getStringValue() > 
141                                    <#assign linkToPage = linkToPage?trim> 
142                                </#if> 
143                             
144                                <#if linkToPage?? && (linkToPage?length == 0 || linkToPage?length == 1) > 
145                                    <#assign xPathLinkInterno = saxReaderUtil.createXPath("dynamic-element[@name='link_interno']")> 
146                                    <#assign linkToPage = xPathLinkInterno.selectSingleNode(rootElement).getStringValue() > 
147                                    <#assign linkToPage = linkToPage?trim> 
148                                </#if>  
149                                <#assign destinationPage = linkToPage> 
150                            <#else> 
151                                <#if structureId == attrattoreStructureKey> 
152                                <#assign subpage = "attrazione"> 
153                                <#elseif structureId == eventoStructureKey> 
154                                <#assign subpage = "evento"> 
155                                <#elseif structureId == itinerarioStructureKey> 
156                                <#assign subpage = "itinerario"> 
157                                <#elseif structureId == ricettaStructureKey> 
158                                <#assign subpage = "ricetta"> 
159                                <#elseif structureId == luogoStructureKey> 
160                                <#assign subpage = "luogo"> 
161                                <#else> 
162                                </#if> 
163                                <#--CONTENT BY DEFAULT LOCALE--> 
164                                <#attempt> 
165                                    <#assign contentByDefaultLocale = ja.getContentByLocale(localeUtil.getDefault()) /> 
166                                    <#assign documentByDefaultLocale = saxReaderUtil.read(contentByDefaultLocale) > 
167                                    <#assign rootElementByDefaultLocale = documentByDefaultLocale.getRootElement()> 
168                                        <#assign xPathImmagineListaByDefaultLocale = saxReaderUtil.createXPath("dynamic-element[@name='immagine_lista']")> 
169                                        <#if xPathImmagineListaByDefaultLocale?? && xPathImmagineListaByDefaultLocale?has_content> 
170                                            <#if xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale)?? && xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale)?has_content> 
171                                                <#assign immagineListaByDefaultLocale = xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale).getStringValue()> 
172                                            </#if> 
173                                        </#if> 
174                                        <#assign xPathImmagineBannerByDefaultLocale = saxReaderUtil.createXPath("dynamic-element[@name='banner']")> 
175                                        <#if xPathImmagineBannerByDefaultLocale?? && xPathImmagineBannerByDefaultLocale?has_content> 
176	                                        <#assign immagineBannerByDefaultLocale = xPathImmagineBannerByDefaultLocale.selectSingleNode(rootElementByDefaultLocale).getStringValue()>                            
177	                                        <#if immagineListaByDefaultLocale?trim?has_content> 
178	                                            <#assign immagineByDefaultLocale = immagineListaByDefaultLocale> 
179	                                        <#else> 
180	                                            <#assign immagineByDefaultLocale = immagineBannerByDefaultLocale> 
181	                                        </#if> 
182                                        </#if> 
183                                        <#if validator.isNotNull(immagineByDefaultLocale)> 
184                                            <#attempt> 
185                                                <#assign imgJsonByDefaultLocale = jsonFactoryUtil.createJSONObject(immagineByDefaultLocale)> 
186                                                <#assign url = "/documents/"+ imgJsonByDefaultLocale.groupId +"/" +imgJsonByDefaultLocale.classPK +"/"+ imgJsonByDefaultLocale.title +"/"+imgJsonByDefaultLocale.uuid + "?width=600" > 
187                                            <#recover> 
188                                                <#assign url = ""> 
189                                            </#attempt> 
190                                        </#if> 
191                                <#recover> 
192                                </#attempt> 
193                                <#--CONTENT BY DEFAULT LOCALE--> 
194 
195                                <#assign urlTitle = ja.getUrlTitle() /> 
196                                <#assign document = saxReaderUtil.read(contentByLocale) > 
197                                <#assign rootElement = document.getRootElement()> 
198                                <#assign xPathTitolo = "" /> 
199                                <#assign xPathSottotitolo_abstract = "" /> 
200                                <#assign xPathImmagineBanner = "" /> 
201                                <#assign xPathTextAltImg = "" /> 
202                                <#assign immagineLista = ""> 
203                                <#assign textAltImgLista = ""> 
204                                <#assign immagine = "">   
205                                <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")> 
206                                <#assign xPathSottotitolo_abstract = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")> 
207                                 
208                                <#assign xPathImmagineLista = saxReaderUtil.createXPath("dynamic-element[@name='immagine_lista']")> 
209                                <#if xPathImmagineLista?? && xPathImmagineLista?has_content> 
210                                    <#if xPathImmagineLista.selectSingleNode(rootElement)?? && xPathImmagineLista.selectSingleNode(rootElement)?has_content> 
211                                        <#assign immagineLista = xPathImmagineLista.selectSingleNode(rootElement).getStringValue()> 
212                                    </#if> 
213                                </#if> 
214                                <#assign xPathTextAltImgLista = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine_lista']")> 
215                                <#if xPathTextAltImgLista?? && xPathTextAltImgLista?has_content> 
216                                    <#if xPathTextAltImgLista.selectSingleNode(rootElement)?? && xPathTextAltImgLista.selectSingleNode(rootElement)?has_content> 
217                                        <#assign textAltImgLista = xPathTextAltImgLista.selectSingleNode(rootElement).getStringValue()> 
218                                    </#if> 
219                                </#if> 
220 
221                                <#assign xPathImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='banner']")> 
222                                <#assign xPathTextAltImg = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_banner']")> 
223                                <#assign textAltImg = xPathTextAltImg.selectSingleNode(rootElement).getStringValue()> 
224                                <#assign destinationPage = "${detailBaseUrl}/search/-/search/${subpage}/${urlTitle}" /> 
225                                <#assign titolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 
226                                <#assign sottotitolo_abstract = xPathSottotitolo_abstract.selectSingleNode(rootElement).getStringValue()>    
227                                 
228                                <#assign immagineBanner = xPathImmagineBanner.selectSingleNode(rootElement).getStringValue()> 
229                                <#if !textAltImg?has_content> 
230                                    <#assign textAltImg = titolo> 
231                                </#if> 
232                                                                 
233                                <#if immagineLista?trim?has_content> 
234                                    <#assign immagine = immagineLista> 
235                                    <#assign textAltImg = textAltImgLista> 
236                                <#else> 
237                                    <#assign immagine = immagineBanner> 
238                                </#if> 
239 
240                                <#if validator.isNotNull(immagine)> 
241                                    <#attempt> 
242                                        <#assign imgJson = jsonFactoryUtil.createJSONObject(immagine)> 
243                                        <#assign url = "/documents/"+ imgJson.groupId +"/" +imgJson.classPK +"/"+ imgJson.title +"/"+imgJson.uuid + "?width=600" > 
244                                    <#recover> 
245                                    </#attempt> 
246                                </#if> 
247                            </#if> 
248                            <div class="card-container col-12 palermo-carousel-item ${colorebordo}"> 
249                                <div class="row"> 
250                                    <div class="card"> 
251                                        <a href="${destinationPage}"> 
252                                            <img class="card-img-top" src="${url}" alt="${textAltImg}"> 
253                                            <div class="card-body"> 
254                                                <h3 class="card-title">${titolo} 
255                                                </h3> 
256                                                <p class="card-text"> 
257                                                    ${sottotitolo_abstract} 
258                                                </p> 
259                                            </div> 
260                                        </a> 
261                                    </div> 
262                                </div> 
263                            </div> 
264                        </#list> 
265                    </div> 
266                </div> 
267                </div> 
268            </div> 
269            </div> 
270        </div> 
271        </div> 
272    </div> 
273    <#else> 
274        <div style="border: 1px solid red; padding:20px;"> 
275            <h3 style="color: red;">Questo template supporta solo contenuti di tipo Web Content con struttura attrattori, eventi, itinerari, ricette, luoghi e proposte di viaggio.</h3> 
276            <h3 style="color: red;">Configurare opportunamente l'aggregatore risorse</h3> 
277        </div> 
278    </#if> 
279    
280</#if> 

Aggregatore Risorse

Aggregatore Risorse

Aggregatore Risorse

Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing:
==> structureService.getStructureAttrattoreKey()  [in template "20099#20135#153060" at line 11, column 39]

----
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: #assign attrattoreStructureKey = stru...  [in template "20099#20135#153060" at line 11, column 5]
----
1<#-- CAROSELLO MULTITIPO 05/07/2023--> 
2 
3<#assign showTemplate = false /> 
4<#assign emptyEntries = false /> 
5 
6<#assign structureService = serviceLocator.findService("it.inera.palermo.structure.service.StructureService")> 
7<#assign detailBaseUrl = structureService.getSiteBaseUrl(themeDisplay)> 
8 
9<#if entries?has_content>  
10    <#assign showTemplate = true /> 
11    <#assign attrattoreStructureKey = structureService.getStructureAttrattoreKey()> 
12    <#assign eventoStructureKey = structureService.getStructureEventoKey()> 
13    <#assign itinerarioStructureKey = structureService.getStructureItinerarioKey()> 
14    <#assign ricettaStructureKey = structureService.getStructureRicettaKey()> 
15    <#assign luogoStructureKey = structureService.getStructureLuogoKey()> 
16    <#assign categoriaStructureKey = "34431"> 
17     
18    <#assign layout = themeDisplay.getLayout()/> 
19    <#assign currentSite = themeDisplay.getSiteGroup()/> 
20    <#assign currentSiteUrl = currentSite.getPathFriendlyURL(false, themeDisplay)/> 
21    <#assign currentSiteFriendlyUrl = currentSite.getFriendlyURL()/> 
22 
23    <#assign count = 1/> 
24    <#list entries as curEntry> 
25        <#assign assetRenderer = curEntry.getAssetRenderer()/> 
26        <#if validator.isNotNull(assetRenderer)> 
27            <#assign className = assetRenderer.getClassName() /> 
28            <#if className == "com.liferay.journal.model.JournalArticle"> 
29                <#assign ja = assetRenderer.getArticle() /> 
30                <#assign structureId = ja.getStructureId() /> 
31                 
32                <#if showTemplate && structureId != attrattoreStructureKey && structureId != eventoStructureKey  
33                	&& structureId != itinerarioStructureKey && structureId != ricettaStructureKey  
34                	&& structureId != luogoStructureKey && structureId != categoriaStructureKey> 
35                    <#assign showTemplate = false /> 
36                </#if> 
37            <#else> 
38                <#assign showTemplate = false /> 
39            </#if> 
40        <#else> 
41            <#assign showTemplate = false /> 
42        </#if> 
43    </#list> 
44<#else> 
45    <#assign emptyEntries = true /> 
46</#if>  
47 
48<#if !emptyEntries>  
49    <#if showTemplate> 
50    <div class="container mb-5"> 
51        <div class="row"> 
52        <div class="col-12"> 
53            <div class="tab-content category-offers" id="offer-tab-content"> 
54            <div class="tab-pane fade show active" id="visite-guidate" role="tabpanel" aria-labelledby="visite-guidate-label"> 
55                <div class="row"> 
56                <div class="col-12"> 
57                    <div class="card-carousel owl-carousel std-card-carousel" data-carousel="{&quot;nav&quot;:true,&quot;navText&quot;:[&quot;&lt;i class='icon-angle-left'&gt;&lt;/i&gt;&quot;,&quot;&lt;i class='icon-angle-right'&gt;&lt;/i&gt;&quot;],&quot;autoplay&quot;:false,&quot;autoplayHoverPause&quot;:true,&quot;responsiveClass&quot;:true,&quot;responsive&quot;:{&quot;0&quot;:{&quot;items&quot;:1,&quot;slideBy&quot;:1},&quot;480&quot;:{&quot;items&quot;:2,&quot;slideBy&quot;:2},&quot;768&quot;:{&quot;items&quot;:3,&quot;slideBy&quot;:3}}}"> 
58                     
59                        <#list entries as curEntry> 
60                            <#assign assetRenderer = curEntry.getAssetRenderer()/> 
61                            <#assign ja = assetRenderer.getArticle() /> 
62                            <#assign structureId = ja.getStructureId() /> 
63                            <#assign langId = themeDisplay.getLanguageId() /> 
64                            <#assign contentByLocale = ja.getContentByLocale(themeDisplay.getLanguageId()) /> 
65                             
66						    <#assign colorebordo = "border-bottom-yellow"> 
67						    <#assign subpage = "luogo"> 
68                            <#assign destinationPage = "" /> 
69                            <#assign url = ""> 
70                            <#assign textAltImg = "" /> 
71                            <#assign titolo = ""> 
72                            <#assign sottotitolo_abstract = ""> 
73 
74                            <#if structureId == categoriaStructureKey> 
75 
76                                <#assign document = saxReaderUtil.read(contentByLocale) > 
77                                <#assign rootElement = document.getRootElement()> 
78                                 
79                                <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")> 
80                                <#assign titolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 
81                                 
82                                <#assign xPathSottotitolo = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")> 
83                                <#assign sottotitolo_abstract = xPathSottotitolo.selectSingleNode(rootElement).getStringValue()> 
84                                 
85                                <#assign colorebordo = "border-bottom-yellow"> 
86                                <#assign xPathColorBorder = saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']")> 
87                                <#if xPathColorBorder?? && xPathColorBorder?has_content  
88                                    && saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']")?has_content 
89                                    && (saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue())?? 
90                                    && (saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue())?has_content> 
91                                <#assign colorebordo = saxReaderUtil.createXPath("dynamic-element[@name='colorebordo']").getStringValue()> 
92                                </#if> 
93                                 
94                                <#assign xPathImmagine = saxReaderUtil.createXPath("dynamic-element[@name='immagine']")> 
95                                <#if xPathImmagine?? && xPathImmagine?has_content > 
96                                    <#assign imgNews = xPathImmagine.selectSingleNode(rootElement).getStringValue()> 
97                                    <#if imgNews?? && imgNews?has_content && (imgNews?length > 1)> 
98                                     
99                                    <#attempt> 
100                                        <#assign imgJson = jsonFactoryUtil.createJSONObject(imgNews)> 
101                                        <#assign url = "/documents/"+ imgJson.groupId +"/" +imgJson.classPK +"/"+ imgJson.title +"/"+imgJson.uuid + "?width=600" > 
102                                    <#recover>  
103                                    </#attempt> 
104                                    </#if> 
105                                </#if> 
106                                 
107                                <#assign xPathTextAltImg = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine']")> 
108                                <#assign textAltImg = xPathTextAltImg.selectSingleNode(rootElement).getStringValue()> 
109                                 
110                                <#assign xPathLinkAPagina = saxReaderUtil.createXPath("dynamic-element[@name='link_a_pagina']")> 
111                                <#assign linkToPage = "" > 
112                                 
113                                <#if xPathLinkAPagina?? > 
114                                    <#if xPathLinkAPagina?has_content > 
115                                        <#assign linkAPagina = xPathLinkAPagina.selectSingleNode(rootElement).getStringValue() > 
116                                        <#assign linkAPaginaSplitted = linkAPagina?split("@") > 
117                                        <#assign layoutIdPage = linkAPaginaSplitted?first > 
118                                        <#assign layoutIdPage = getterUtil.getLong(layoutIdPage) > 
119                                        <#assign groupIdPage = linkAPaginaSplitted?last > 
120                                        <#assign groupIdPage = getterUtil.getLong(groupIdPage) > 
121                                         
122                                        <#if layoutIdPage != 0 > 
123                                            <#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")> 
124                                            <#assign contentPage = ""> 
125                                            <#attempt> 
126                                            <#assign contentPage = layoutLocalService.getLayout(groupIdPage, false, layoutIdPage ) > 
127                                            <#if contentPage?? > 
128                                                <#assign linkToPage = contentPage.getFriendlyURL(locale) > 
129                                                <#assign linkToPage = currentSiteUrl + currentSiteFriendlyUrl + linkToPage?trim> 
130                                            </#if> 
131                                            <#recover> 
132                                            </#attempt> 
133                                        </#if> 
134                                         
135                                    </#if> 
136                                </#if> 
137                                 
138                                <#if linkToPage?? && (linkToPage?length == 0 || linkToPage?length == 1) > 
139                                    <#assign xPathLinkEsterno = saxReaderUtil.createXPath("dynamic-element[@name='link_esterno']")> 
140                                    <#assign linkToPage = xPathLinkEsterno.selectSingleNode(rootElement).getStringValue() > 
141                                    <#assign linkToPage = linkToPage?trim> 
142                                </#if> 
143                             
144                                <#if linkToPage?? && (linkToPage?length == 0 || linkToPage?length == 1) > 
145                                    <#assign xPathLinkInterno = saxReaderUtil.createXPath("dynamic-element[@name='link_interno']")> 
146                                    <#assign linkToPage = xPathLinkInterno.selectSingleNode(rootElement).getStringValue() > 
147                                    <#assign linkToPage = linkToPage?trim> 
148                                </#if>  
149                                <#assign destinationPage = linkToPage> 
150                            <#else> 
151                                <#if structureId == attrattoreStructureKey> 
152                                <#assign subpage = "attrazione"> 
153                                <#elseif structureId == eventoStructureKey> 
154                                <#assign subpage = "evento"> 
155                                <#elseif structureId == itinerarioStructureKey> 
156                                <#assign subpage = "itinerario"> 
157                                <#elseif structureId == ricettaStructureKey> 
158                                <#assign subpage = "ricetta"> 
159                                <#elseif structureId == luogoStructureKey> 
160                                <#assign subpage = "luogo"> 
161                                <#else> 
162                                </#if> 
163                                <#--CONTENT BY DEFAULT LOCALE--> 
164                                <#attempt> 
165                                    <#assign contentByDefaultLocale = ja.getContentByLocale(localeUtil.getDefault()) /> 
166                                    <#assign documentByDefaultLocale = saxReaderUtil.read(contentByDefaultLocale) > 
167                                    <#assign rootElementByDefaultLocale = documentByDefaultLocale.getRootElement()> 
168                                        <#assign xPathImmagineListaByDefaultLocale = saxReaderUtil.createXPath("dynamic-element[@name='immagine_lista']")> 
169                                        <#if xPathImmagineListaByDefaultLocale?? && xPathImmagineListaByDefaultLocale?has_content> 
170                                            <#if xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale)?? && xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale)?has_content> 
171                                                <#assign immagineListaByDefaultLocale = xPathImmagineListaByDefaultLocale.selectSingleNode(rootElementByDefaultLocale).getStringValue()> 
172                                            </#if> 
173                                        </#if> 
174                                        <#assign xPathImmagineBannerByDefaultLocale = saxReaderUtil.createXPath("dynamic-element[@name='banner']")> 
175                                        <#if xPathImmagineBannerByDefaultLocale?? && xPathImmagineBannerByDefaultLocale?has_content> 
176	                                        <#assign immagineBannerByDefaultLocale = xPathImmagineBannerByDefaultLocale.selectSingleNode(rootElementByDefaultLocale).getStringValue()>                            
177	                                        <#if immagineListaByDefaultLocale?trim?has_content> 
178	                                            <#assign immagineByDefaultLocale = immagineListaByDefaultLocale> 
179	                                        <#else> 
180	                                            <#assign immagineByDefaultLocale = immagineBannerByDefaultLocale> 
181	                                        </#if> 
182                                        </#if> 
183                                        <#if validator.isNotNull(immagineByDefaultLocale)> 
184                                            <#attempt> 
185                                                <#assign imgJsonByDefaultLocale = jsonFactoryUtil.createJSONObject(immagineByDefaultLocale)> 
186                                                <#assign url = "/documents/"+ imgJsonByDefaultLocale.groupId +"/" +imgJsonByDefaultLocale.classPK +"/"+ imgJsonByDefaultLocale.title +"/"+imgJsonByDefaultLocale.uuid + "?width=600" > 
187                                            <#recover> 
188                                                <#assign url = ""> 
189                                            </#attempt> 
190                                        </#if> 
191                                <#recover> 
192                                </#attempt> 
193                                <#--CONTENT BY DEFAULT LOCALE--> 
194 
195                                <#assign urlTitle = ja.getUrlTitle() /> 
196                                <#assign document = saxReaderUtil.read(contentByLocale) > 
197                                <#assign rootElement = document.getRootElement()> 
198                                <#assign xPathTitolo = "" /> 
199                                <#assign xPathSottotitolo_abstract = "" /> 
200                                <#assign xPathImmagineBanner = "" /> 
201                                <#assign xPathTextAltImg = "" /> 
202                                <#assign immagineLista = ""> 
203                                <#assign textAltImgLista = ""> 
204                                <#assign immagine = "">   
205                                <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")> 
206                                <#assign xPathSottotitolo_abstract = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")> 
207                                 
208                                <#assign xPathImmagineLista = saxReaderUtil.createXPath("dynamic-element[@name='immagine_lista']")> 
209                                <#if xPathImmagineLista?? && xPathImmagineLista?has_content> 
210                                    <#if xPathImmagineLista.selectSingleNode(rootElement)?? && xPathImmagineLista.selectSingleNode(rootElement)?has_content> 
211                                        <#assign immagineLista = xPathImmagineLista.selectSingleNode(rootElement).getStringValue()> 
212                                    </#if> 
213                                </#if> 
214                                <#assign xPathTextAltImgLista = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine_lista']")> 
215                                <#if xPathTextAltImgLista?? && xPathTextAltImgLista?has_content> 
216                                    <#if xPathTextAltImgLista.selectSingleNode(rootElement)?? && xPathTextAltImgLista.selectSingleNode(rootElement)?has_content> 
217                                        <#assign textAltImgLista = xPathTextAltImgLista.selectSingleNode(rootElement).getStringValue()> 
218                                    </#if> 
219                                </#if> 
220 
221                                <#assign xPathImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='banner']")> 
222                                <#assign xPathTextAltImg = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_banner']")> 
223                                <#assign textAltImg = xPathTextAltImg.selectSingleNode(rootElement).getStringValue()> 
224                                <#assign destinationPage = "${detailBaseUrl}/search/-/search/${subpage}/${urlTitle}" /> 
225                                <#assign titolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 
226                                <#assign sottotitolo_abstract = xPathSottotitolo_abstract.selectSingleNode(rootElement).getStringValue()>    
227                                 
228                                <#assign immagineBanner = xPathImmagineBanner.selectSingleNode(rootElement).getStringValue()> 
229                                <#if !textAltImg?has_content> 
230                                    <#assign textAltImg = titolo> 
231                                </#if> 
232                                                                 
233                                <#if immagineLista?trim?has_content> 
234                                    <#assign immagine = immagineLista> 
235                                    <#assign textAltImg = textAltImgLista> 
236                                <#else> 
237                                    <#assign immagine = immagineBanner> 
238                                </#if> 
239 
240                                <#if validator.isNotNull(immagine)> 
241                                    <#attempt> 
242                                        <#assign imgJson = jsonFactoryUtil.createJSONObject(immagine)> 
243                                        <#assign url = "/documents/"+ imgJson.groupId +"/" +imgJson.classPK +"/"+ imgJson.title +"/"+imgJson.uuid + "?width=600" > 
244                                    <#recover> 
245                                    </#attempt> 
246                                </#if> 
247                            </#if> 
248                            <div class="card-container col-12 palermo-carousel-item ${colorebordo}"> 
249                                <div class="row"> 
250                                    <div class="card"> 
251                                        <a href="${destinationPage}"> 
252                                            <img class="card-img-top" src="${url}" alt="${textAltImg}"> 
253                                            <div class="card-body"> 
254                                                <h3 class="card-title">${titolo} 
255                                                </h3> 
256                                                <p class="card-text"> 
257                                                    ${sottotitolo_abstract} 
258                                                </p> 
259                                            </div> 
260                                        </a> 
261                                    </div> 
262                                </div> 
263                            </div> 
264                        </#list> 
265                    </div> 
266                </div> 
267                </div> 
268            </div> 
269            </div> 
270        </div> 
271        </div> 
272    </div> 
273    <#else> 
274        <div style="border: 1px solid red; padding:20px;"> 
275            <h3 style="color: red;">Questo template supporta solo contenuti di tipo Web Content con struttura attrattori, eventi, itinerari, ricette, luoghi e proposte di viaggio.</h3> 
276            <h3 style="color: red;">Configurare opportunamente l'aggregatore risorse</h3> 
277        </div> 
278    </#if> 
279    
280</#if> 

Aggregatore Risorse

Aggregatore Risorse

SEZIONE: La Santuzza e il dialogo interreligioso

La Santuzza non è soltanto la patrona dei palermitani.
Tra i tanti gruppi etnici che hanno adottato Rosalia, quello dei Tamil è di sicuro il più devoto.
La comunità è veramente imponente, la più numerosa tra quelle presenti in Italia: circa 8mila persone, Palermo è la terza città nel mondo per numero di residenti Tamil, la maggior parte delle famiglie proviene dallo Sri Lanka e si è rifugiata a Palermo per sfuggire alla sanguinosa guerra civile scoppiata in patria.
 

Scopri di più