Se ha producido un error al procesar 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			 
111				</div>     
112			</div> 
113			<div> 
114				<p></p> 
115				<div class="card-share flex"> 
116					<div class="card-actions flex"> 
117						<div class="statistics"> 
118							<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> 
119	                        <path class="circle-bg" d="M18 2.0845 
120	                            a 15.9155 15.9155 0 0 1 0 31.831 
121	                            a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
122	                        <path class="circle" stroke-dasharray="${valoracionesDisplayAverage*20}, 100" d="M18 2.0845 
123	                            a 15.9155 15.9155 0 0 1 0 31.831 
124	                            a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
125	                        <text x="18" y="22" class="percentage">${valoracionesDisplayAverage}</text> 
126	                    </svg> 
127						</div> 
128						<div class="share"> 
129	                        <button id="share"></button> 
130	                        <div class="a2a_kit a2a_kit_size_32 a2a_default_style tooltip" data-a2a-title="${titleEscaped}" data-a2a-icon-color="#009AD8"> 
131                            <a class="a2a_button_facebook"></a> 
132                            <a class="a2a_button_x"></a> 
133                            <a class="a2a_button_whatsapp"></a> 
134                            <a class="a2a_button_email"></a> 
135                        </div> 
136	                    </div> 
137						<div class="bookmark"> 
138							<#if is_signed_in> 
139								<#if isUserBookmark> 
140									<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},false);" data-articleid="${journalArticleId}" class="bookmark bookmarked"></button>  
141								<#else> 
142									<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},true);" data-articleid="${journalArticleId}" class="bookmark"></button> 
143								</#if> 
144							<#else> 
145								<button id="bookmark" onClick="event.stopPropagation();openPopup('${loginURL}','','500', '650')"></button> 
146							</#if> 
147						</div> 
148					</div>                     
149				</div> 
150			</div> 
151        </div> 
152    </div> 
153</div> 
154 
155<div class="container"> 
156    <div class="row" style="margin-top: 4%;"> 
157        <div class="col-lg-7"> 
158        	<#if interviewTitle.getData()?? && interviewTitle.getData() != ""> 
159	            <p class="main-text-title color-caixa-red">${interviewTitle.getData()}</p> 
160	            <p class="main-text">${interviewTitle.inteview.getData()?replace('<iframe','<iframe sandbox="allow-scripts allow-same-origin"')}</p> 
161            </#if> 
162            <#if highlightTitle.getData()?? && highlightTitle.getData() != ""> 
163	            <p class="main-text-title color-caixa-red">${highlightTitle.getData()}</p> 
164	            <p class="main-text">${highlightTitle.highlightText.getData()?replace('<iframe','<iframe sandbox="allow-scripts allow-same-origin"')}</p> 
165				<#if highlightTitle.highlightInternalFile.getData()?? && highlightTitle.highlightInternalFile.getData() != ""> 
166					<img alt="${title.getData()}" class="img-fluid col-lg" src="${highlightTitle.highlightInternalFile.getData()}"> 
167				</#if> 
168            </#if> 
169            <#if carrouselTitle.getData()?? && carrouselTitle.getData() != ""> 
170	            <p class="main-text-title color-caixa-red">${carrouselTitle.getData()}</p> 
171	            <p class="main-text">${carrouselTitle.carrouselTxt.getData()}</p> 
172             </#if> 
173             <#if highlightTitle.highlightExternalVideoLink.getData()?has_content> 
174				<#assign YTVideo = highlightTitle.highlightExternalVideoLink.getData()/> 
175				<div class="yt-video-wrapper hide-print"> 
176					<iframe src="https://www.youtube.com/embed/${YTVideo}?rel=0" allowfullscreen webkitallowfullscreen mozallowfullscreen frameborder='0'></iframe> 
177				</div> 
178			<#elseif highlightTitle.highlightInternalFile.getData()?has_content > 
179				<#assign file = DLFileEntryLocalService.getFileEntryByUuidAndGroupId(highlightTitle.highlightInternalFile.getData()?keep_after_last("/")?keep_before("?"),groupId)/> 
180				<#assign mimeType = file.getMimeType()?keep_before("/")/> 
181				<#if mimeType == "image"> 
182					<img src="${highlightTitle.highlightInternalFile.getData()}" alt="">  
183				<#elseif mimeType == "video"> 
184					<div class="video-wrapper hide-print"> 
185						<video controls="" controlsList="nodownload"> 
186						  <source src="${highlightTitle.highlightInternalFile.getData()}" type="${file.getMimeType()}"> 
187						</video> 
188						<div class="playpause"></div> 
189					</div> 
190				</#if> 
191			</#if> 
192        </div> 
193        <#-- Register content --> 
194		<#if journalArticleLocalService.fetchArticle(groupId, "CAPTACION_EXPERIENCIA") ??> 
195		<#assign register = journalArticleLocalService.getArticle(groupId, "CAPTACION_EXPERIENCIA")/>  
196			<#if register?? && register != ""> 
197	            <#assign registerContent = journalArticleLocalService.getArticleContent(register, register.DDMTemplateKey, "VIEW", themeDisplay.getLocale(),NULL, themeDisplay) />  
198	        </#if> 
199	        <#assign registerContent = journalArticleLocalService.getArticleContent(register, register.DDMTemplateKey, "VIEW", themeDisplay.getLocale(),NULL, themeDisplay) />  
200		  	<div class= "captacion-ficha"> 
201		  		${registerContent} 
202	  		</div> 
203	    </#if> 
204    </div> 
205</div> 
206 
207<script> 
208$( document ).ready(function() { 
209    initAddThis(); 
210	$("a.header-back-to").attr('onClick',''); 
211    $("a.header-back-to").attr("href","/es/experiencias"); 
212    <#if language=='ca_ES'> 
213		$("a.header-back-to ").attr("href","/ca/experiencias"); 
214	</#if>	 
215}); 
216</script> 
217 
218<style> 
219.yt-video-wrapper iframe { 
220    position: absolute; 
221    top: 0; 
222    left: 0; 
223    width: 100%; 
224    height: 100%; 
225
226.image-wrapper, .video-wrapper, .yt-video-wrapper { 
227    position: relative; 
228
229.yt-video-wrapper { 
230    position: relative; 
231    padding-bottom: 56.25%; 
232    padding-top: 25px; 
233    height: 0; 
234
235.contenido-dcha-item > span { 
236    width: 100%; 
237    height: 1px; 
238    display: inline-block; 
239
240.asset-full-content.clearfix.mb-5.default-asset-publisher.no-title > .align-items-center.d-flex.mb-2 { 
241  max-width: 1140px; 
242  margin: 0 auto; 
243  margin-bottom: 0px; 
244  margin-top:20px; 
245
246 
247p.component-title.h4 span.header-back-to > a.taglib-icon::after { 
248  content: "${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.atras")}"; 
249  color:#009AD8; 
250
251 
252 
253.asset-full-content.clearfix.mb-5.default-asset-publisher.no-title > .align-items-center.d-flex.mb-2 .lexicon-icon.lexicon-icon-angle-left { 
254    fill: #009AD8; 
255    width: 15px; 
256    height: 15px; 
257    margin-right: 10px; 
258
259.container.vertical.image-view.ficha-evidencias .box-img.col-lg.square { 
260    box-shadow: 1px 1px 8px #d0d0d0; 
261
262 
263.journal-content-article .col-lg-7 { 
264    font-size: 17px; 
265    line-height: 27px; 
266
267.journal-content-article p.main-text-title { 
268    font-weight: bold; 
269    margin-bottom: 20px; 
270    font-size: 20px; 
271    line-height: 30px; 
272
273 
274.journal-content-article a:not([class]) { 
275    color: #006fe7;  
276
277.journal-content-article a:not([class]):hover { 
278    color: #0056b3; 
279
280 
281.has-control-menu .lfr-asset-anchor { 
282    display:inline-block; 
283
284 
285.register-content a.register-button { 
286    display: inline-flex; 
287    justify-content: center; 
288    align-items: center; 
289
290.journal-content-article .tags a { 
291    color: #000000; 
292
293 
294.journal-content-article .yt-video-wrapper.hide-print { margin-top:20px;} 
295 
296</style>