S'ha produït un error mentre es processava la plantilla.
The following has evaluated to null or missing:
==> bannerImage.getAttribute("alt")  [in template "76121110924137#32361#FICHA_EXPERIENCIA_TPL" at line 48, column 50]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #if bannerImage?? && bannerImage.getD...  [in template "76121110924137#32361#FICHA_EXPERIENCIA_TPL" at line 48, column 1]
----
1<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
2<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
3<#assign UtilsService = serviceLocator.findService("com.educaixa.common.service.EduCaixaCommonService")/> 
4<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")/> 
5<#assign valoracionesDisplay = serviceLocator.findService("com.educaixa.services.service.RatingStatsLocalService")/> 
6<#assign LiteralsToolsServiceUtil = serviceLocator.findService("com.aqua.literals.util.LiteralsToolsService")/> 
7<#assign language = themeDisplay.getLocale()/> 
8<#assign groupId = themeDisplay.getScopeGroupId()/> 
9<#assign restultsLiteral = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.common.link.resultados") /> 
10<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()> 
11<#assign httpServletRequest = serviceContext.getRequest() /> 
12<#assign UserBookmarkLocalService = serviceLocator.findService("com.educaixa.services.service.UserBookmarkLocalService") /> 
13 
14<#-- get the content categories --> 
15<#assign article = journalArticleLocalService.getArticle(getterUtil.getLong(scopeGroupId), .vars['reserved-article-id'].data) /> 
16<#assign asset = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", article.resourcePrimKey) /> 
17 
18<#-- get the results URL and valoration value--> 
19<#assign results_url = "${themeDisplay.getPortalURL()}/${locale.getLanguage()}${restultsLiteral}?q=" /><#assign valoracionesDisplayAverage = 0/> 
20<#if valoracionesDisplay.fetchByResourcePK(themeDisplay.getScopeGroupId(),themeDisplay.getCompanyId(),article.getResourcePrimKey()) ??> 
21    <#assign valoracionesDisplayValue = valoracionesDisplay.findByResourcePK(themeDisplay.getScopeGroupId(),themeDisplay.getCompanyId(),article.getResourcePrimKey()) /> 
22    <#assign valoracionesDisplayAverage = valoracionesDisplayValue.getAverageGlobalScore() /> 
23</#if> 
24 
25<#assign journalArticleId = .vars['reserved-article-id'].data/> 
26<#assign userId =themeDisplay.getUserId()/> 
27<#assign isUserBookmark = UserBookmarkLocalService.isUserBookmark(themeDisplay.getCompanyId(),userId,journalArticleId,groupId)/> 
28 
29<#assign resourceType = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.experiencia") > 
30 
31<#-- Escape title text --> 
32<#if title.getData()??> 
33    <#assign titleEscaped = title.getData()?replace('<p>','','r')/> 
34    <#assign titleEscaped = titleEscaped?replace('</p>','','r')/> 
35    <#assign titleEscaped = titleEscaped?replace('<div>','','r')/> 
36    <#assign titleEscaped = titleEscaped?replace('</div>','','r')/> 
37    <#assign titleEscaped = titleEscaped?replace('<h1>','','r')/> 
38    <#assign titleEscaped = titleEscaped?replace('</h1>','','r')/> 
39</#if> 
40 
41<#if subtitle.getData()??> 
42    <#assign subtituloEscaped = subtitle.getData() /> 
43    <#assign subtituloEscaped = subtituloEscaped?replace('<p>','','r')/> 
44    <#assign subtituloEscaped = subtituloEscaped?replace('</p>','','r')/> 
45</#if> 
46 
47<#-- get image alt -->							 
48<#if bannerImage?? && bannerImage.getData()?? && bannerImage.getAttribute("alt") != ""> 
49    <#assign altImage = bannerImage.getAttribute("alt") /> 
50<#else> 
51    <#assign altImage = titleEscaped /> 
52</#if> 
53 
54<#-- get image banner --> 
55<#if bannerImage ?? && bannerImage.getData() != "" && bannerImage.getData() != ""> 
56    <#assign imagenthumbnailSrc = bannerImage.getData() /> 
57<#else>     
58    <#assign imagenthumbnailSrc = "/o/educaixa-theme/images/blured-lights-experiencia.png" /> 
59</#if> 
60 
61<#assign thesaurusCategories = UtilsService.getThesaurusCategories(asset) /> 
62<#assign tagsCategories = UtilsService.getTagsCategories(asset) /> 
63<#assign categories = thesaurusCategories + tagsCategories /> 
64 
65<#assign language = themeDisplay.getLocale()/> 
66<#assign nivel_educativo_vocabularyId = assetVocabularyLocalService.getGroupVocabulary(groupId, "Nivel educativo").getVocabularyId() /> 
67<#assign area_conocimiento_vocabularyId = assetVocabularyLocalService.getGroupVocabulary(groupId, "Área de conocimiento").getVocabularyId() /> 
68<#assign competencias_vocabularyId = assetVocabularyLocalService.getGroupVocabulary(groupId, "Competencias clave").getVocabularyId() /> 
69 
70 
71<#assign nivel_educativo = []> 
72<#assign area_conocimiento = []> 
73<#assign competencias = []> 
74<#assign objectius = []> 
75 
76  
77<#list asset.getCategories() as cur_category> 
78    <#if cur_category.vocabularyId == nivel_educativo_vocabularyId> 
79        <#assign nivel_educativo = nivel_educativo + [cur_category.getTitle(language)]> 
80    <#elseif cur_category.vocabularyId == area_conocimiento_vocabularyId> 
81        <#assign area_conocimiento = area_conocimiento + [cur_category.getTitle(language)]> 
82    <#elseif cur_category.vocabularyId == competencias_vocabularyId> 
83        <#assign competencias = competencias + [cur_category.getTitle(language)]>  
84    </#if> 
85																			    
86</#list> 
87 
88 
89<#-- Login --> 
90<#assign is_signed_in = themeDisplay.isSignedIn()/> 
91<#assign plid = portalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), "EducaixaMyeducaixaLogin") /> 
92<#assign loginURL = portletURLFactory.create(httpServletRequest, "EducaixaMyeducaixaLogin", plid, "RENDER_PHASE") /> 
93${loginURL.setParameter("mvcPath", "/login_modal.jsp")} 
94${loginURL.setWindowState("POP_UP")} 
95 
96<div class="container vertical image-view" style="padding: 0px;"> 
97    <div class="row"> 
98        <img  alt="${altImage}" src="${imagenthumbnailSrc}" class="img-fluid col-lg-7" style="padding: 0px; width: auto; flex-basis: auto;" width="900" height="548"> 
99        <div class="box-img col-lg square"> 
100            <p class="box-img-pre-o color-caixa-red">${resourceType}</p> 
101            <#if title?has_content> 
102                <h3 class="element-title">${titleEscaped}</h3> 
103            </#if> 
104            <#if subtitle?has_content> 
105                <p class="element-body">${subtituloEscaped}</p> 
106            </#if> 
107 
108			<div class="valoration-row"> 
109				<div class="links-wrapper"> 
110					<#if categories?has_content> 
111	                    <div class="bloque hide-below-980"> 
112	                        <div class="tags"> 
113	                            <#list categories as category> 
114	                                <#-- redirects to the results page with the tag--> 
115	                                <a onClick="updateTagsCicks('${category.getTitle(locale)}');" href="${results_url}${category.getTitle(locale)}" >${category.getTitle(locale)}</a> 
116	                            </#list> 
117	                        </div> 
118	                    </div> 
119					</#if> 
120				</div>     
121			</div> 
122			<div> 
123				<p></p> 
124				<div class="card-share flex"> 
125					<div class="card-actions flex"> 
126						<div class="statistics"> 
127							<svg viewBox="0 0 36 36" class="circular-chart orange"><line x1="18" y1="-5" x2="18" y2="5" stroke="black" stroke-width="2"></line> 
128	                        <path class="circle-bg" d="M18 2.0845 
129	                            a 15.9155 15.9155 0 0 1 0 31.831 
130	                            a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
131	                        <path class="circle" stroke-dasharray="${valoracionesDisplayAverage*20}, 100" d="M18 2.0845 
132	                            a 15.9155 15.9155 0 0 1 0 31.831 
133	                            a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
134	                        <text x="18" y="22" class="percentage">${valoracionesDisplayAverage}</text> 
135	                    </svg> 
136						</div> 
137						<div class="share"> 
138	                        <button id="share"></button> 
139	                        <div class="a2a_kit a2a_kit_size_32 a2a_default_style tooltip" data-a2a-title="${titleEscaped}" data-a2a-icon-color="#009AD8"> 
140                            <a class="a2a_button_facebook"></a> 
141                            <a class="a2a_button_x"></a> 
142                            <a class="a2a_button_whatsapp"></a> 
143                            <a class="a2a_button_email"></a> 
144                        </div> 
145	                    </div> 
146						<div class="bookmark"> 
147							<#if is_signed_in> 
148								<#if isUserBookmark> 
149									<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},false);" data-articleid="${journalArticleId}" class="bookmark bookmarked"></button>  
150								<#else> 
151									<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},true);" data-articleid="${journalArticleId}" class="bookmark"></button> 
152								</#if> 
153							<#else> 
154								<button id="bookmark" onClick="event.stopPropagation();openPopup('${loginURL}','','500', '650')"></button> 
155							</#if> 
156						</div> 
157					</div>                     
158				</div> 
159			</div> 
160        </div> 
161    </div> 
162</div> 
163 
164<div class="container"> 
165    <div class="row" style="margin-top: 4%;"> 
166        <div class="col-lg-7"> 
167        	<#if interviewTitle.getData()?? && interviewTitle.getData() != ""> 
168	            <p class="main-text-title color-caixa-red">${interviewTitle.getData()}</p> 
169	            <p class="main-text">${interviewTitle.inteview.getData()?replace('<iframe','<iframe sandbox="allow-scripts allow-same-origin"')}</p> 
170            </#if> 
171            <#if highlightTitle.getData()?? && highlightTitle.getData() != ""> 
172	            <p class="main-text-title color-caixa-red">${highlightTitle.getData()}</p> 
173	            <p class="main-text">${highlightTitle.highlightText.getData()?replace('<iframe','<iframe sandbox="allow-scripts allow-same-origin"')}</p> 
174				<#if highlightTitle.highlightInternalFile.getData()?? && highlightTitle.highlightInternalFile.getData() != ""> 
175					<img alt="${title.getData()}" class="img-fluid col-lg" src="${highlightTitle.highlightInternalFile.getData()}"> 
176				</#if> 
177            </#if> 
178            <#if carrouselTitle.getData()?? && carrouselTitle.getData() != ""> 
179	            <p class="main-text-title color-caixa-red">${carrouselTitle.getData()}</p> 
180	            <p class="main-text">${carrouselTitle.carrouselTxt.getData()}</p> 
181             </#if> 
182             <#if highlightTitle.highlightExternalVideoLink.getData()?has_content> 
183				<#assign YTVideo = highlightTitle.highlightExternalVideoLink.getData()/> 
184				<div class="yt-video-wrapper hide-print"> 
185					<iframe src="https://www.youtube.com/embed/${YTVideo}?rel=0" allowfullscreen webkitallowfullscreen mozallowfullscreen frameborder='0'></iframe> 
186				</div> 
187			<#elseif highlightTitle.highlightInternalFile.getData()?has_content > 
188				<#assign file = DLFileEntryLocalService.getFileEntryByUuidAndGroupId(highlightTitle.highlightInternalFile.getData()?keep_after_last("/")?keep_before("?"),groupId)/> 
189				<#assign mimeType = file.getMimeType()?keep_before("/")/> 
190				<#if mimeType == "image"> 
191					<img src="${highlightTitle.highlightInternalFile.getData()}" alt="">  
192				<#elseif mimeType == "video"> 
193					<div class="video-wrapper hide-print"> 
194						<video controls="" controlsList="nodownload"> 
195						  <source src="${highlightTitle.highlightInternalFile.getData()}" type="${file.getMimeType()}"> 
196						</video> 
197						<div class="playpause"></div> 
198					</div> 
199				</#if> 
200			</#if> 
201        </div> 
202        <#-- Register content --> 
203		<#if journalArticleLocalService.fetchArticle(groupId, "CAPTACION_EXPERIENCIA") ??> 
204		<#assign register = journalArticleLocalService.getArticle(groupId, "CAPTACION_EXPERIENCIA")/>  
205			<#if register?? && register != ""> 
206	            <#assign registerContent = journalArticleLocalService.getArticleContent(register, register.DDMTemplateKey, "VIEW", themeDisplay.getLocale(),NULL, themeDisplay) />  
207	        </#if> 
208	        <#assign registerContent = journalArticleLocalService.getArticleContent(register, register.DDMTemplateKey, "VIEW", themeDisplay.getLocale(),NULL, themeDisplay) />  
209		  	<div class= "captacion-ficha"> 
210		  		${registerContent} 
211	  		</div> 
212	    </#if> 
213    </div> 
214</div> 
215 
216<script> 
217$( document ).ready(function() { 
218    initAddThis(); 
219	$("a.header-back-to").attr('onClick',''); 
220    $("a.header-back-to").attr("href","/es/experiencias"); 
221    <#if language=='ca_ES'> 
222		$("a.header-back-to ").attr("href","/ca/experiencias"); 
223	</#if>	 
224}); 
225</script> 
226 
227<style> 
228.yt-video-wrapper iframe { 
229    position: absolute; 
230    top: 0; 
231    left: 0; 
232    width: 100%; 
233    height: 100%; 
234
235.image-wrapper, .video-wrapper, .yt-video-wrapper { 
236    position: relative; 
237
238.yt-video-wrapper { 
239    position: relative; 
240    padding-bottom: 56.25%; 
241    padding-top: 25px; 
242    height: 0; 
243
244.contenido-dcha-item > span { 
245    width: 100%; 
246    height: 1px; 
247    display: inline-block; 
248
249.asset-full-content.clearfix.mb-5.default-asset-publisher.no-title > .align-items-center.d-flex.mb-2 { 
250  max-width: 1140px; 
251  margin: 0 auto; 
252  margin-bottom: 0px; 
253  margin-top:20px; 
254
255 
256p.component-title.h4 span.header-back-to > a.taglib-icon::after { 
257  content: "${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.atras")}"; 
258  color:#009AD8; 
259
260 
261 
262.asset-full-content.clearfix.mb-5.default-asset-publisher.no-title > .align-items-center.d-flex.mb-2 .lexicon-icon.lexicon-icon-angle-left { 
263    fill: #009AD8; 
264    width: 15px; 
265    height: 15px; 
266    margin-right: 10px; 
267
268.container.vertical.image-view.ficha-evidencias .box-img.col-lg.square { 
269    box-shadow: 1px 1px 8px #d0d0d0; 
270
271 
272.journal-content-article .col-lg-7 { 
273    font-size: 17px; 
274    line-height: 27px; 
275
276.journal-content-article p.main-text-title { 
277    font-weight: bold; 
278    margin-bottom: 20px; 
279    font-size: 20px; 
280    line-height: 30px; 
281
282 
283.journal-content-article a:not([class]) { 
284    color: #006fe7;  
285
286.journal-content-article a:not([class]):hover { 
287    color: #0056b3; 
288
289 
290.has-control-menu .lfr-asset-anchor { 
291    display:inline-block; 
292
293 
294.register-content a.register-button { 
295    display: inline-flex; 
296    justify-content: center; 
297    align-items: center; 
298
299.journal-content-article .tags a { 
300    color: #000000; 
301
302 
303.journal-content-article .yt-video-wrapper.hide-print { margin-top:20px;} 
304 
305</style>