An error occurred while processing the template.
The following has evaluated to null or missing:
==> cur_foto.imagen.getAttribute("alt")  [in template "16924578#16924624#69198" at line 36, column 196]

----
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: ${cur_foto.imagen.getAttribute("alt")}  [in template "16924578#16924624#69198" at line 36, column 194]
----
1<style> 
2  #map { 
3    height: 100%; 
4    position: relative; 
5    overflow: visible; 
6
7</style> 
8<#if ! themeDisplay ? has_content> 
9       <#assign liferay_theme = PortletJspTagLibs["/META-INF/liferay-theme.tld"] /> 
10       <@liferay_theme["defineObjects"] /> 
11</#if> 
12<h1 class="title">${themeDisplay.getLayout().getName(locale)}</h1> 
13<div class="wrap-content mB30 clearfix"> 
14	<#assign firstImageNotEmpty = false /> 
15	<#if galeriaImagenes.foto?has_content> 
16		<#if galeriaImagenes.foto.getSiblings()?size == 1> 
17			<#assign firstImage = galeriaImagenes.foto.getSiblings()?first> 
18			<#if firstImage??> 
19				<#if (firstImage.imagen?? && firstImage.imagen.getData()?? && firstImage.imagen.getData() != "")> 
20					<#assign firstImageNotEmpty = true /> 
21				</#if> 
22			</#if> 
23		<#else> 
24			<#assign firstImageNotEmpty = true /> 
25		</#if> 
26	</#if> 
27	<#if firstImageNotEmpty || descripcionProyecto.getData()?has_content> 
28		<div class="col-magic-slider mB20"> 
29			<#if firstImageNotEmpty> 
30				<div class="pull-right w50 mL20 mB20"> 
31					<section class="slider-minOwl"> 
32						<div id="slider-minOwl" class="owl-carousel owl-theme"> 
33							<#list galeriaImagenes.foto.getSiblings() as cur_foto> 
34								<#if galeriaImagenes.foto.imagen.getData()?? && galeriaImagenes.foto.imagen.getData() != ""> 
35								   <div class="item"> 
36										<img class="img-responsive w100 cornerBR" data-fileentryid="${cur_foto.imagen.getAttribute("fileEntryId")}" alt="${cur_foto.imagen.getAttribute("alt")}" src="${cur_foto.imagen.getData()}" />                      
37										<#if cur_foto.nombre.getData()?has_content> 
38											<div class="minwc"> 
39												<p>${cur_foto.nombre.getData()}</p> 
40											</div> 
41										</#if>  
42									</div> 
43								</#if>  
44							</#list> 
45						</div> 
46					</section> 
47				</div> 
48			</#if> 
49			<#if descripcionProyecto.getData()?has_content> 
50				<div> 
51					<p>${descripcionProyecto.getData()}</p> 
52				</div> 
53			</#if> 
54		</div> 
55	</#if> 
56</div> 
57<#if datosSignificativos.dato?has_content> 
58	<#if datosSignificativos.dato.getSiblings()?has_content> 
59		<#assign firstDatoNotEmpty = false /> 
60		<#if datosSignificativos.dato.getSiblings()?size == 1> 
61			<#assign firstDato = datosSignificativos.dato.getSiblings()?first> 
62			<#if firstDato??> 
63				<#if (firstDato.icono?? && firstDato.icono.getData()?? && firstDato.icono.getData() != "") || (firstDato.nombreDato?? && firstDato.nombreDato.getData()?? && firstDato.nombreDato.getData() != "") 
64							|| (firstDato.subtituloDato.getData()?? && firstDato.subtituloDato.getData() != "")> 
65					<#assign firstDatoNotEmpty = true /> 
66				</#if> 
67			</#if> 
68		<#else> 
69			<#assign firstDatoNotEmpty = true /> 
70		</#if> 
71		<#if firstDatoNotEmpty> 
72			<div class="pB35"> 
73				<div class="flexbox"> 
74					<#if datosSignificativos.dato.getSiblings()?has_content> 
75						<#list datosSignificativos.dato.getSiblings() as cur_dato> 
76							<div class="flexColumna blueBox cornerBR"> 
77								<#if cur_dato.iconoDato.getData()?? && cur_dato.iconoDato.getData() != ""> 
78									<div class="blueBox-image"> 
79										<img data-fileentryid="${cur_dato.iconoDato.getAttribute("fileEntryId")}" alt="${cur_dato.iconoDato.getAttribute("alt")}" src="${cur_dato.iconoDato.getData()}" class="img46" /> 
80									</div> 
81								</#if> 
82								<div class="blueBox-text"> 
83									<h4 class="txtAzulOscuro">${cur_dato.nombreDato.getData()}</h4> 
84									<p>${cur_dato.subtituloDato.getData()}</p> 
85								</div> 
86							</div> 
87						</#list> 
88					</#if> 
89				</div> 
90			</div> 
91		</#if> 
92	</#if> 
93</#if> 
94<#if video.linkVideoExterno.getData()?? || video.linkVideoExterno.getData() != ""> 
95	<div class="row pB35"> 
96		<div class="col-xs-12"> 
97			<h2 class="title mB10">${video.tituloVideo.getData()}</h2> 
98			<p>${video.subtituloVideo.getData()}</p> 
99		</div> 
100		<#if video.linkVideoExterno.getData()?? && video.linkVideoExterno.getData() != ""> 
101			<div class="col-xs-12 col-sm-6"> 
102				<div class="embed-responsive embed-responsive-16by9"> 
103					<iframe class="embed-responsive-item" src="${video.linkVideoExterno.getData()}" allowfullscreen="allowfullscreen"></iframe> 
104				</div> 
105			</div> 
106		</#if>	 
107		<#if video.linkVideoInterno.getData()?? && video.linkVideoInterno.getData() != ""> 
108			<div class="col-xs-12 col-sm-6"> 
109				<div class="embed-responsive embed-responsive-16by9"> 
110				    <#if video.imagenVideo??> 
111    					<#if video.imagenVideo.getData()?? && video.imagenVideo.getData() != ""> 
112    						<video controls poster="${video.imagenVideo.getData()}" preload="metadata"> 
113    							<source src="${video.linkVideoInterno.getData()}" type="video/mp4"> 
114    							<source src="${video.linkVideoInterno.getData()}" type="video/ogg" /> 
115    							<source src="${video.linkVideoInterno.getData()}" type="video/webm" /> 
116    						</video> 
117    					<#else> 
118        					<video controls preload="metadata"> 
119    							<source src="${video.linkVideoInterno.getData()}#t=1" type="video/mp4"> 
120    							<source src="${video.linkVideoInterno.getData()}#t=1" type="video/ogg" /> 
121    							<source src="${video.linkVideoInterno.getData()}#t=1" type="video/webm" /> 
122    						</video> 
123    					</#if> 
124					<#else>	 
125						<video controls preload="metadata"> 
126							<source src="${video.linkVideoInterno.getData()}#t=1" type="video/mp4"> 
127							<source src="${video.linkVideoInterno.getData()}#t=1" type="video/ogg" /> 
128							<source src="${video.linkVideoInterno.getData()}#t=1" type="video/webm" /> 
129						</video> 
130					</#if> 
131				</div> 
132			</div> 
133		</#if> 
134	</div> 
135</#if> 
136<#assign latitude = 0> 
137<#assign longitude = 0> 
138 
139<#if (geolocalizacion.getData() != "")> 
140 
141	<#assign geolocationJSONObject = jsonFactoryUtil.createJSONObject(geolocalizacion.getData())> 
142 
143	<#assign latitude = geolocationJSONObject.getDouble("latitude")> 
144	<#assign longitude = geolocationJSONObject.getDouble("longitude")> 
145</#if> 
146<#if separadorCoordenadas?has_content> 
147    <#if separadorCoordenadas.latitud.getData() != "" && separadorCoordenadas.longitud.getData() != ""> 
148        <#assign latitude = separadorCoordenadas.latitud.getData()?replace(",", ".")> 
149        <#assign longitude = separadorCoordenadas.longitud.getData()?replace(",", ".")> 
150    </#if> 
151</#if> 
152<#if (geolocalizacion.getData() != "") || (separadorCoordenadas?has_content && separadorCoordenadas.latitud.getData() != "" && separadorCoordenadas.longitud.getData() != "")> 
153	<#assign PortalPreferencesUtil = staticUtil["com.liferay.portal.kernel.service.PortalPreferencesLocalServiceUtil"] /> 
154	<#assign portletPreferences = PortalPreferencesUtil.getPreferences(companyId, 1) /> 
155	<#assign googleMapsAPIKey = portletPreferences.getValue("googleMapsAPIKey", "") /> 
156	<div class="row pB35"> 
157		<div class="wrap-content mT30 mB60 clearfix"> 
158			<div class="col-xs-12 col-sm-12"> 
159				<div id="traza-maps" class="js-maptraza" style="position: relative; overflow: hidden;"> 
160					<div class="lfr-map yui3-widget lfrmapgoogle" id="geolocalizacionMap" style="position: relative; overflow: hidden;"></div> 
161				</div> 
162			</div> 
163		</div> 
164	</div> 
165	<script type="text/javascript"> 
166		function initMap() { 
167			var project = {lat: ${latitude?number}, lng:${longitude?number}}; 
168			var map = new google.maps.Map(document.getElementById('geolocalizacionMap'), {zoom:18, center: project}); 
169			var marker = new google.maps.Marker({position: project, map: map}); 
170
171	</script> 
172	<script async defer src="https://maps.googleapis.com/maps/api/js?key=${googleMapsAPIKey}&callback=initMap"></script> 
173</#if> 
174<#assign back = languageUtil.get(locale, "back-to-top")> 
175<button class="volver" onclick="goBack()" style="background-color: #002C58;color: #ffffff;border-radius: 0 0 20px 0;padding: 8px 20px;font-size: 15.5px;color: #fff;background-color: #002C58;border: none;width: auto;height: 42px;float: right;margin-bottom: 1.5em;">&lt;&nbsp;&nbsp;&nbsp;${back?keep_before(" ")}</button> 
176<script> 
177    function goBack() { 
178        window.history.back(); 
179
180</script> 

We use our own and third party cookies for analytical purposes. Click on HERE for more information. You can accept all cookies by clicking the "Accept" button or set them up or refuse their use by clicking .

Cookie declaration

These cookies are necessary for the website to function and cannot be disabled in our systems. These cookies do not store any personally identifiable information.

Name Provider Purpose Expiration Type
LFR_Sesión_STATE_* Liferay Manage your session as a registered user Session HTTP
GUEST_LANGUAGE_ID Liferay Determines the language with which it accesses, to show the same in the next session 1 year HTTP
ANONYMOUS_USER_ID Liferay Manage your session as an unregistered user 1 year HTTP
COOKIE_SUPPORT Liferay Identifies that the use of cookies is necessary for the operation of the portal 1 year HTTP
JSesiónID Liferay Manages login and indicates you are using the site Session HTTP
SACYRGDPR Sacyr Used to manage the cookie policy Session HTTP

These cookies allow us to count visits and sources of circulation in order to measure and improve the performance of our site. They help us know which pages are the most or least popular, and see how many people visit the site. All information collected by these cookies is aggregated and therefore anonymous.

Name Provider Purpose Expiration Type
_gat Google It is used to throttle the request rate - limiting the collection of data on high traffic sites Session HTTP
_gid Google It is used to store and update a unique value for each page visited Session HTTP
_ga Google This is used for statistical and analytical purposes for increasing performance of our Services Session HTTP