Errorea gertatu da txantiloia prozesatzerakoan.
The following has evaluated to null or missing:
==> request.getParameter(parametro)  [in template "842907#842945#9755374" at line 10, column 20]

----
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: #assign numForo = request.getParamete...  [in template "842907#842945#9755374" at line 10, column 1]
----
1<#assign fileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") > 
2 
3<!-- VARIABLES --> 
4<#assign articleId = .vars['reserved-article-id'].data > 
5<#assign portletNamespace = themeDisplay.getPortletDisplay().getId() /> 
6 
7 
8<#assign renderURL = themeDisplay.getURLCurrent()> 
9<#assign parametro = "foro"> 
10<#assign numForo = request.getParameter(parametro)/> 
11<#assign numForo1 ="1"/> 
12<#assign numForo2 ="2"/> 
13<#assign numForo3 ="3"/> 
14 
15<#assign groupId = 880311> 
16 
17<#assign imagenCabecera_ForoI_articleId = "9776888"> 
18<#assign imagenCabecera_ForoII_articleId = "9777586"> 
19<#assign imagenCabecera_ForoIII_articleId = "9777704"> 
20 
21<#if numForo = numForo1> 
22	<#assign articleId = imagenCabecera_ForoI_articleId> 
23<#elseif numForo = numForo2> 
24	<#assign articleId = imagenCabecera_ForoII_articleId> 
25<#else> 
26	<#assign articleId = imagenCabecera_ForoIII_articleId> 
27</#if> 
28 
29<#if !validator.equalsSorted([""], [articleId])> 
30	<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
31	<#assign journalArticle = journalArticleLocalService.getArticle(groupId, articleId) > 
32 
33	<#assign documentcurrentArticle = saxReaderUtil.read(journalArticle.getContentByLocale(locale)) > 
34	<#assign rootElementcurrentArticle = documentcurrentArticle.getRootElement() > 
35	 
36	 
37	<#assign video = rootElementcurrentArticle.valueOf("//dynamic-element[@name='video']/dynamic-content/text()") /> 
38	<#assign imageMobile = rootElementcurrentArticle.valueOf("//dynamic-element[@name='imageMobile']/dynamic-content/text()") /> 
39	<#assign imageTablet = rootElementcurrentArticle.valueOf("//dynamic-element[@name='imageTablet']/dynamic-content/text()") /> 
40	<#assign imageDesktop = rootElementcurrentArticle.valueOf("//dynamic-element[@name='imageDesktop']/dynamic-content/text()") /> 
41	<#assign alt = rootElementcurrentArticle.valueOf("//dynamic-element[@name='alt']/dynamic-content/text()") /> 
42 
43	<#if validator.equalsSorted([""], [video])> 
44		 <picture> 
45            <source srcset="${getFileEntryJson(imageMobile)}" media="(max-width: 480px)">  
46            <source srcset="${getFileEntryJson(imageTablet)}" media="(max-width: 992px)"> 
47            <source srcset="${getFileEntryJson(imageDesktop)}" media="(min-width: 993px)"> 
48            <img src="${getFileEntryJson(imageDesktop)}" alt="${htmlUtil.escape(alt)}"> 
49        </picture> 
50	<#else> 
51		<div class="hidden" id="${portletNamespace}video"> 
52			<video class="lg-video-object lg-html5" controls > 
53				<source src="${video}" type="video/mp4"> 
54				<@liferay.language key="dpt-imagen-cabecera.html5-not-supported" /> 
55			</video> 
56		</div> 
57		<#assign text = languageUtil.get(locale, "dpt-imagen-cabecera.html5-not-supported")> 
58		<#assign titleVideo = rootElementcurrentArticle.valueOf("//dynamic-element[@name='video']/dynamic-content") /> 
59		 
60		<#assign titleVideo = ""> 
61		 
62		 
63		<#if !validator.equalsSorted([""], [titleVideo])> 
64			<#assign titleVideo = "<p>${titleVideo}</p>" > 
65		<#else> 
66			<#assign titleVideo = ""> 
67		</#if> 
68		 
69		<#assign description = saxReaderUtil.createXPath("dynamic-element[@name='videoFieldSet']/dynamic-element[@name='videoFieldSetFieldSet']/dynamic-element[@name='description']/dynamic-content").selectSingleNode(rootElementcurrentArticle).getStringValue()  > 
70		<div id="${portletNamespace}lightGalleryHeader"> 
71		 
72			<div  
73				data-html="#${portletNamespace}video"  
74				data-sub-html="${titleVideo}${description}" 
75				tabindex="0" class="bipo-video-pointer"> 
76				  <a href="#" class="bipo_video" role="button"> 
77					  <span class="bipo_reproductor bipoicon icon-play2"> 
78						<span class="sr-only"><@liferay.language key="dpt-imagen-cabecera.play-video" /></span> 
79					  </span> 
80					  <picture> 
81							<source srcset="${getFileEntryJson(imageMobile)}" media="(max-width: 480px)">  
82							<source srcset="${getFileEntryJson(imageTablet)}" media="(max-width: 992px)"> 
83							<source srcset="${getFileEntryJson(imageDesktop)}" media="(min-width: 993px)"> 
84							<img src="${getFileEntryJson(imageDesktop)}" alt="${htmlUtil.escape(alt)}"> 
85					  </picture> 
86				  </a> 
87			</div> 
88		</div> 
89		<script type="text/javascript"> 
90			var $galeriaVideo = $(document).ready(function(){ 
91				$('#${portletNamespace}lightGalleryHeader').lightGallery({ 
92					thumbnail: false, 
93					counter:false, 
94					download: false 
95				}); 
96			}); 
97			$galeriaVideo.on('onAfterAppendSubHtml.lg', function(event){             
98				$('.lg-close span.sr-only').text('<@liferay.language key="close" />'); 
99				$('.lg-toogle-transcription').html('<@liferay.language key="lightgallery.transcription" />');                       
100				$('.lg-video-play span.sr-only').text('<@liferay.language key="play" />'); 
101				$('.lg-fullscreen span.sr-only').text('<@liferay.language key="full-screen" />'); 
102			});  
103		</script> 
104	</#if> 
105</#if> 
106<#-- 
107<#if validator.equalsSorted([""], [video.getData()])> 
108	    <picture> 
109            <source srcset="${imageMobile.getData()}" media="(max-width: 480px)">  
110            <source srcset="${imageTablet.getData()}" media="(max-width: 992px)"> 
111            <source srcset="${imageDesktop.getData()}" media="(min-width: 993px)"> 
112            <img src="${imageDesktop.getData()}" alt="${htmlUtil.escape(alt.getData())}"> 
113        </picture> 
114<#else> 
115	<div class="hidden" id="${portletNamespace}video"> 
116	    <video class="lg-video-object lg-html5" controls > 
117	        <source src="${video.getData()}" type="video/mp4"> 
118            <@liferay.language key="dpt-imagen-cabecera.html5-not-supported" /> 
119	    </video> 
120	</div> 
121	 
122	<#assign text = languageUtil.get(locale, "dpt-imagen-cabecera.html5-not-supported")> 
123	<#if video.getChild('title')??> 
124	    <#assign titleVideo = "<p>video.getChild('title').getData()</p>" > 
125	<#else> 
126	    <#assign titleVideo = ""> 
127	</#if> 
128	<div id="${portletNamespace}lightGalleryHeader"> 
129		<div  
130		    data-html="#${portletNamespace}video"  
131		    data-sub-html="${titleVideo}${video.getChild('description').getData()}" 
132		    tabindex="0" class="bipo-video-pointer"> 
133              <a href="#" class="bipo_video" role="button"> 
134                  <span class="bipo_reproductor bipoicon icon-play2"> 
135                    <span class="sr-only"><@liferay.language key="dpt-imagen-cabecera.play-video" /></span> 
136                  </span> 
137                  <picture> 
138                    <source srcset="${imageMobile.getData()}" media="(max-width: 480px)">  
139                    <source srcset="${imageTablet.getData()}" media="(max-width: 992px)"> 
140                    <source srcset="${imageDesktop.getData()}" media="(min-width: 993px)"> 
141                    <img  src="${imageDesktop.getData()}" alt="${htmlUtil.escape(alt.getData())}"> 
142                  </picture> 
143              </a> 
144		</div> 
145	</div> 
146	<script type="text/javascript"> 
147        var $galeriaVideo = $(document).ready(function(){ 
148    		$('#${portletNamespace}lightGalleryHeader').lightGallery({ 
149    		    thumbnail: false, 
150    		    counter:false, 
151    		    download: false 
152    		}); 
153    	}); 
154        $galeriaVideo.on('onAfterAppendSubHtml.lg', function(event){             
155            $('.lg-close span.sr-only').text('<@liferay.language key="close" />'); 
156            $('.lg-toogle-transcription').html('<@liferay.language key="lightgallery.transcription" />');                       
157            $('.lg-video-play span.sr-only').text('<@liferay.language key="play" />'); 
158            $('.lg-fullscreen span.sr-only').text('<@liferay.language key="full-screen" />'); 
159        });  
160    </script> 
161</#if> 
162 
163--> 
164<#--Obtener nombre fichero para src--> 
165<#function getFileNameEntryJson url > 
166   <#assign urljson = url?eval> 
167   <#assign group_id =urljson.groupId /> 
168   <#assign uuid = urljson.uuid /> 
169   <#assign fichero = urljson.title /> 
170   <#return fichero />  
171</#function> 
172 
173<#function getFileEntryJson url > 
174 
175	<#assign urljson = url?eval> 
176  <#assign group_id =urljson.groupId /> 
177  <#assign uuid = urljson.uuid /> 
178  <#assign fichero = urljson.title /> 
179 
180  <#assign fileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") > 
181  <#assign DLFichero= fileEntryService.getDLFileEntryByUuidAndGroupId(uuid?string, group_id?eval) />  
182   <#return "/documents/"+group_id+"/"+DLFichero.getFolderId()+"/"+fichero />  
183 
184</#function> 
Errorea gertatu da txantiloia prozesatzerakoan.
The following has evaluated to null or missing:
==> request.getParameter(parametro)  [in template "842907#842945#9755366" at line 8, column 20]

----
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: #assign numForo = request.getParamete...  [in template "842907#842945#9755366" at line 8, column 1]
----
1<!-- SERVICES --> 
2<#assign fileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") > 
3 
4<!-- VARIABLES --> 
5<#assign portletNamespace = themeDisplay.getPortletDisplay().getId() /> 
6<#assign renderURL = themeDisplay.getURLCurrent()> 
7<#assign parametro = "foro"> 
8<#assign numForo = request.getParameter(parametro)/> 
9<#assign numForo1 ="1"/> 
10<#assign numForo2 ="2"/> 
11<#assign numForo3 ="3"/> 
12 
13<#assign groupId = 880311> 
14<#assign intro_ForoI_articleId = "9776954"> 
15<#assign intro_ForoII_articleId = "9777795"> 
16<#assign intro_ForoIII_articleId = "9777810"> 
17 
18<#if numForo = numForo1> 
19	<#assign articleId = intro_ForoI_articleId> 
20<#elseif numForo = numForo2> 
21	<#assign articleId = intro_ForoII_articleId> 
22<#else> 
23	<#assign articleId = intro_ForoIII_articleId> 
24</#if> 
25 
26<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
27<#assign journalArticle = journalArticleLocalService.getArticle(groupId, articleId) > 
28 
29<#assign documentcurrentArticle = saxReaderUtil.read(journalArticle.getContentByLocale(locale)) > 
30<#assign rootElementcurrentArticle = documentcurrentArticle.getRootElement() > 
31<#assign content = rootElementcurrentArticle.valueOf("//dynamic-element[@name='content']/dynamic-content/text()") /> 
32 
33<#if !validator.equalsSorted([""], [articleId])> 
34	${content} 
35</#if> 
Errorea gertatu da txantiloia prozesatzerakoan.
The following has evaluated to null or missing:
==> request.getParameter(parametro)  [in template "842907#842945#9755378" at line 8, column 20]

----
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: #assign numForo = request.getParamete...  [in template "842907#842945#9755378" at line 8, column 1]
----
1<!-- SERVICES --> 
2<#assign fileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") > 
3 
4<!-- VARIABLES --> 
5<#assign portletNamespace = themeDisplay.getPortletDisplay().getId() /> 
6<#assign renderURL = themeDisplay.getURLCurrent()> 
7<#assign parametro = "foro"> 
8<#assign numForo = request.getParameter(parametro)/> 
9<#assign numForo1 ="1"/> 
10<#assign numForo2 ="2"/> 
11<#assign numForo3 ="3"/> 
12 
13<#assign groupId = 880311> 
14<#--<#assign parrafosTitulados_ForoI_articleId = "8899645">--> 
15<#assign parrafosTitulados_ForoI_articleId = ""> 
16<#assign parrafosTitulados_ForoII_articleId = "9777745"> 
17<#assign parrafosTitulados_ForoIII_articleId = "9773686"> 
18 
19 
20 
21 
22<#if numForo = numForo1> 
23	<#assign articleId = parrafosTitulados_ForoI_articleId> 
24<#elseif numForo = numForo2> 
25	<#assign articleId = parrafosTitulados_ForoII_articleId> 
26<#else> 
27	<#assign articleId = parrafosTitulados_ForoIII_articleId> 
28</#if> 
29 
30<#if !validator.equalsSorted([""], [articleId])> 
31	<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
32	<#assign journalArticle = journalArticleLocalService.getArticle(groupId, articleId) > 
33 
34	<#assign documentcurrentArticle = saxReaderUtil.read(journalArticle.getContentByLocale(locale)) > 
35	<#assign rootElementcurrentArticle = documentcurrentArticle.getRootElement() > 
36	<#assign header = rootElementcurrentArticle.valueOf("//dynamic-element[@name='headerFieldSet']/dynamic-element[@name='header']/dynamic-content/text()") /> 
37 
38	<div class="ccm_container_fullgrey pb-6"> 
39		<div class="container section"> 
40		   <#if !validator.equalsSorted([""], [header])>  
41			   <div class="row"> 
42				  <div class="col-xxs-12 col-xxs-offset-0 col-xs-10 col-xs-offset-1 col-sm-10 col-sm-offset-1 col-md-12 col-md-offset-0"> 
43					<span class="bipo_ancla_fixed" id="${portletNamespace}parrafosTitulados"></span> 
44					<h2 class="colorrojo"><span>${header?upper_case}</span></h2> 
45				  </div> 
46			   </div> 
47		   </#if> 
48		  <#assign paragraph = rootElementcurrentArticle.selectNodes("//dynamic-element[@name='paragraphFieldSet']") />	 
49		   
50		   
51		  <div class="row"> 
52			  <div id="${portletNamespace}bipo_contenedor_pestanias" class="bipo_contenedor_pestanias"> 
53				 <div class="col-xxs-12 col-xxs-offset-0 col-xs-10 col-xs-offset-1 col-sm-10 col-sm-offset-1 col-md-12 col-md-offset-0"> 
54					<div class="row"> 
55						<#if paragraph?has_content> 
56						   <div class="hidden-xs hidden-sm col-md-3"> 
57							  <div class="bipoinner"> 
58								 <div class="${portletNamespace}bipo_diputacion_menu_pestanias bipo_diputacion_menu_pestanias"> 
59									 
60									<ul class="resp-tabs-list bipo_vert1"> 
61									   <#list paragraph as curParagraph> 
62											<#assign title = saxReaderUtil.createXPath("dynamic-element[@name='paragraphFieldSetFieldSet']/dynamic-element[@name='title']/dynamic-content").selectSingleNode(curParagraph).data > 
63											<#if !validator.equalsSorted([""], [title])> 
64												<li> 
65													<a href="#${portletNamespace}paragraph-${curParagraph_index}">${title?upper_case}</a> 
66												</li> 
67											</#if> 
68									   </#list> 
69									</ul> 
70									 
71								 </div> 
72							  </div> 
73						   </div> 
74					    
75							<div class="col-xxs-12 col-xxs-offset-0 col-xs-12 col-xs-offset-0 col-sm-12 col-sm-offset-0 col-md-9 col-md-offset-0 resp-tabs-container bipo_vert1 ${portletNamespace}contentPestania "> 
76								<#list paragraph as curParagraph> 
77									<#assign title = saxReaderUtil.createXPath("dynamic-element[@name='paragraphFieldSetFieldSet']/dynamic-element[@name='title']/dynamic-content").selectSingleNode(curParagraph).data > 
78									<#if !validator.equalsSorted([""], [title])> 
79										<div id="${portletNamespace}paragraph-${curParagraph_index}" class="col-xs-12"> 
80											<div class="ccm_decalogo_contentPestania col-xxs-12 col-xxs-offset-0 col-xs-10 col-xs-offset-1 col-sm-10 col-sm-offset-1 col-md-12 col-md-offset-0 bipo_diputacion_pestania "> 
81												<h3 class="hidden-xs hidden-sm">${title?upper_case}</h3> 
82												<#assign description = saxReaderUtil.createXPath("dynamic-element[@name='paragraphFieldSetFieldSet']/dynamic-element[@name='description']/dynamic-content").selectSingleNode(curParagraph).data > 
83												${description} 
84												 
85												<#assign documentos= curParagraph.selectNodes("dynamic-element[@name='paragraphFieldSetFieldSet']/dynamic-element[@name='document']") /> 
86												<#if documentos?has_content> 
87													<#assign tamDocumentos = documentos?size/> 
88													<#assign hayDocumentos = "0"/> 
89													<#list documentos  as curDocumento>  
90														<#assign documento = curDocumento.valueOf("dynamic-element[@name='paragraph']/dynamic-content/text()") />	 
91														<#if (validator.isNotNull(documento) && !validator.equalsSorted([documento],[""] ))> 
92															<#assign hayDocumentos = "1"/> 
93														</#if> 
94													</#list> 
95												</#if> 
96												<#if hayDocumentos = "1"> 
97													<ul> 
98													  <#list documentos  as curDocumento>  
99															<#assign documento = curDocumento.valueOf("dynamic-element[@name='paragraph']/dynamic-content/text()") />	 
100															<#if (validator.isNotNull(documento) && !validator.equalsSorted([documento],[""] ))> 
101																<#assign fileEntry = getFileEntryJson(documento) > 
102																<#assign title = getFileNameEntryJson(documento) > 
103																<#assign enlace = replaceSpecialCharacters(fileEntry)> 
104																<li> 
105																	<a href="${enlace}">${title}</a> 
106															   </li> 
107														   </#if> 
108													   </#list> 
109													</ul> 
110												</#if> 
111												 
112											</div> 
113										</div> 
114									</#if> 
115								</#list> 
116							</div> 
117						</#if> 
118					</div> 
119				 </div> 
120			  </div> 
121		   </div> 
122		   
123		</div> 
124	</div> 
125	 
126</#if>	 
127<script> 
128    
129$(document).ready(function() { 
130 
131    $('#${portletNamespace}bipo_contenedor_pestanias').easyResponsiveTabs({ 
132        tabidentify: "bipo_vert1", 
133        width: "992px", 
134        closed: "accordion", 
135        read_more: false 
136    }); 
137       
138    $('.${portletNamespace}bipo_diputacion_menu_pestanias').scrollToFixed({ 
139        marginTop: 140, 
140        limit: function() { 
141            var limite = 0; 
142            limite = $('.${portletNamespace}contentPestania .resp-tab-content-active .bipo_diputacion_pestania').offset().top + $('.${portletNamespace}contentPestania .resp-tab-content-active .bipo_diputacion_pestania').outerHeight(true) - $(this).outerHeight(true); 
143            return limite; 
144        }, 
145        zIndex: 1, 
146        minWidth: 992, 
147        removeOffsets: true 
148    }); 
149    
150    var ${portletNamespace}fixBipoMenuPestainaTop = function() { 
151        if ($('.${portletNamespace}bipo_diputacion_menu_pestanias').css('position') == 'absolute'){ 
152          $('.${portletNamespace}bipo_diputacion_menu_pestanias').css('position','static'); 
153
154         
155        var ${portletNamespace}pos5 = $('#${portletNamespace}bipo_contenedor_pestanias').offset(); 
156        var ${portletNamespace}offsetMenu5 = parseInt(${portletNamespace}pos5.top, 10); 
157        $(document).scrollTop( ${portletNamespace}offsetMenu5 - 200 ); 
158        ${portletNamespace}cargarReadMore(); 
159
160       
161    $( '#${portletNamespace}bipo_contenedor_pestanias li.resp-tab-item a ' ).on( 'click', function() { 
162        setTimeout(function(){$(window).resize();${portletNamespace}fixBipoMenuPestainaTop()},1); 
163    }); 
164         
165   /* $(document).on( 'click','.${portletNamespace}button', function() { 
166        if ($( ".resp-tab-content-active .bipo_toggle_contenido span" ).hasClass( "icon-flecha_acordeon_plegar" )){ 
167        }else{ 
168            setTimeout(function(){$(window).resize();${portletNamespace}fixBipoMenuPestainaTop()},1); 
169
170    });*/ 
171     
172    ${portletNamespace}cargarReadMore(); 
173     
174}); 
175    
176function ${portletNamespace}cargarReadMore(){ 
177    $("#${portletNamespace}bipo_contenedor_pestanias .bipo_diputacion_pestania").each(function() { 
178        $(this).readmore('destroy'); 
179	    $(this).readmore({ 
180            collapsedHeight: 450, 
181            heightMargin: 23, 
182            embedCSS: false, 
183            moreLink: '<p><button class="${portletNamespace}button bipo_toggle_contenido ccm-btn_readMore hidden-xxs hidden-xs hidden-sm"><span class="bipoicon icon-flecha_acordeon_desplegar"></span><span class="bipo_texto_boton"><@liferay.language key="dpt-parrafos-titulados.show-more" /></span></button></p>', 
184            lessLink: '<p><button class="${portletNamespace}button bipo_toggle_contenido ccm-btn_readMore hidden-xxs hidden-xs hidden-sm"><span class="bipoicon icon-flecha_acordeon_plegar"></span><span class="bipo_texto_boton"><@liferay.language key="dpt-parrafos-titulados.show-less" /></span></button></p>', 
185            startOpen: true, 
186            blockProcessed: function() {$(document).on('click','#${portletNamespace}bipo_contenedor_pestanias .bipo_toggle_contenido',function(){setTimeout(function(){$('#${portletNamespace}bipo_contenedor_pestanias .bipo_diputacion_menu_pestanias').trigger('resize');${portletNamespace}fixBipoMenuPestainaTop()},1); 
187			$('[id*=rmjs]').removeAttr("aria-expanded");}); 
188          }, 
189            beforeToggle: function() {$(document).on('click','#${portletNamespace}bipo_contenedor_pestanias .bipo_toggle_contenido',function(){setTimeout(function(){$('#${portletNamespace}bipo_contenedor_pestanias .bipo_diputacion_menu_pestanias').trigger('resize');${portletNamespace}fixBipoMenuPestainaTop()},1);}); 
190
191        }); 
192    }); 
193
194</script> 
195 
196<#--Obtener fichero para src--> 
197<#function getFileEntryJson url > 
198   <#assign urljson = url?eval> 
199   <#assign group_id =urljson.groupId /> 
200   <#assign uuid = urljson.uuid /> 
201   <#assign fichero = urljson.title /> 
202   <#assign fileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") > 
203   <#assign DLFichero= fileEntryService.getDLFileEntryByUuidAndGroupId(uuid?string, group_id?eval) />  
204   <#return "/documents/"+group_id+"/"+DLFichero.getFolderId()+"/"+fichero />  
205</#function> 
206 
207<#--Obtener nombre fichero para src--> 
208<#function getFileNameEntryJson url > 
209   <#assign urljson = url?eval> 
210   <#assign group_id =urljson.groupId /> 
211   <#assign uuid = urljson.uuid /> 
212   <#assign fichero = urljson.title /> 
213   <#return fichero />  
214</#function> 
215 
216 
217<#function replaceSpecialCharacters(url)> 
218    <#return htmlUtil.escapeHREF(url?replace("|","%7C")) /> 
219</#function> 
Errorea gertatu da txantiloia prozesatzerakoan.
The following has evaluated to null or missing:
==> request.getParameter(parametro)  [in template "842907#842945#9755370" at line 8, column 20]

----
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: #assign numForo = request.getParamete...  [in template "842907#842945#9755370" at line 8, column 1]
----
1<!-- SERVICES --> 
2<#assign fileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") > 
3<#assign textFormatter = staticUtil["com.liferay.portal.kernel.util.TextFormatter"]> 
4<!-- VARIABLES --> 
5<#assign portletNamespace = themeDisplay.getPortletDisplay().getId() /> 
6<#assign renderURL = themeDisplay.getURLCurrent()> 
7<#assign parametro = "foro"> 
8<#assign numForo = request.getParameter(parametro)/> 
9<#assign numForo1 ="1"/> 
10<#assign numForo2 ="2"/> 
11<#assign numForo3 ="3"/> 
12 
13<#assign groupId = 880311> 
14<#assign archivos_ForoI_articleId = "9777121"> 
15<#assign archivos_ForoII_articleId = "9777835"> 
16<#assign archivos_ForoIII_articleId = "9777944"> 
17 
18<#if numForo = numForo1> 
19	<#assign articleId = archivos_ForoI_articleId> 
20<#elseif numForo = numForo2> 
21	<#assign articleId = archivos_ForoII_articleId> 
22<#else> 
23	<#assign articleId = archivos_ForoIII_articleId> 
24</#if> 
25 
26<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
27<#assign journalArticle = journalArticleLocalService.getArticle(groupId, articleId) > 
28 
29<#assign documentcurrentArticle = saxReaderUtil.read(journalArticle.getContentByLocale(locale)) > 
30<#assign rootElementcurrentArticle = documentcurrentArticle.getRootElement() > 
31<#assign content = rootElementcurrentArticle.valueOf("//dynamic-element[@name='content']/dynamic-content/text()") /> 
32 
33 
34<#if !validator.equalsSorted([""], [articleId])> 
35 
36	<div id="${portletNamespace}ccm_acciones_CiudadaniaCajaGris" class="ccm_container_fullblanco pb-6 mb-3"> 
37		<div class="container ccm_content"> 
38			<div class="row"> 
39				<div class="col-sm-12 col-md-8  pr-md-5"> 
40					<#assign titulo = rootElementcurrentArticle.valueOf("//dynamic-element[@name='titulo']/dynamic-content/text()") /> 
41					<#if (validator.isNotNull(titulo) && !validator.equalsSorted([titulo],[""] ))> 
42						<h2 class=""><span>${titulo?upper_case}</span></h2> 
43					</#if> 
44				</div> 
45			</div>	 
46			 
47			<@pintarDocumentos/> 
48		 
49		 
50		</div>	 
51	</div> 
52 
53</#if> 
54 
55<#function replaceSpecialCharacters(url)> 
56    <#return htmlUtil.escapeHREF(url?replace("|","%7C")) /> 
57</#function> 
58 
59 
60<#macro pintarDocumentos> 
61	<#assign nombreDocumento = "" /> 
62	<#assign documento = "" /> 
63	<#assign fileEntry = ""/> 
64	<#assign extension =""/> 
65	<#assign size=""/> 
66	<#assign tamanyo ="" /> 
67	<#assign currentArticleDocumentos	 = rootElementcurrentArticle.selectNodes("dynamic-element[@field-reference='documentoFieldSet']") /> 
68	<#if currentArticleDocumentos?has_content> 
69		<#assign tamDocumentos = currentArticleDocumentos?size/> 
70		<div class="row"> 
71			<div class="col-md-12"> 
72				<#if tamDocumentos gt 1> 
73					<ul class="bipo-ccm_listas listasPDF"> 
74				</#if> 
75 
76				<#list currentArticleDocumentos as curDocumento> 
77					<#assign nombreDocumento =""> 
78					<#assign nombreDocumento= saxReaderUtil.createXPath("dynamic-element[@field-reference='documentoFieldSetFieldSet']/dynamic-element[@name='tituloDocumento']/dynamic-content").selectSingleNode(curDocumento).data > 
79					<#assign documento = curDocumento.valueOf("dynamic-element[@field-reference='documento']/dynamic-content/text()") />	 
80					<#assign extension =""> 
81					<#assign size = ""> 
82					<#-- SI HAY DOCUMENTO SE PINTA ELEMENTO --> 
83					<#if (validator.isNotNull(documento) && !validator.equalsSorted([documento],[""] ))> 
84						 
85						<#assign target="target='_blank'"> 
86						<#assign title=languageUtil.get(locale, 'ccm.opens-new-window')> 
87						<#assign fileEntry = getFileEntryInfo(documento) />   
88						<#assign extension = fileEntry.extension?upper_case> 
89						<#assign size =textFormatter.formatStorageSize(fileEntry.size, locale)?upper_case> 
90						<#assign file = getFileEntryJson(documento) />   
91						<#if (size?contains("KB"))> 
92							<#assign tamanyo = size?replace("KB", "<abbr title='Kilobytes' lang='en'>KB</abbr>")> 
93						<#elseif (size?contains("MB"))> 
94							<#assign tamanyo = size?replace("MB", "<abbr title='Megabytes' lang='en'>MB</abbr>")> 
95						</#if> 
96					 
97						<#if tamDocumentos gt 1> 
98							<li> 
99						<#else> 
100							<p class="bipo-ccm_listas listasPDF"> 
101						</#if> 
102						<a href="${file}" ${target} title="${title}"> 
103							<span class="bipoicon icon-descargar">${extension}</span> 
104							${nombreDocumento} <span class="typeOswald">(${tamanyo})</span> 
105						</a> 
106						<#if tamDocumentos gt 1> 
107							</li> 
108						<#else> 
109							</p> 
110						</#if> 
111						 
112					</#if> 
113				</#list> 
114				<#if tamDocumentos gt 1> 
115					</ul> 
116				</#if> 
117			</div> 
118		</div> 
119	</#if>	 
120</#macro> 
121 
122 
123<#--Obtener fichero para src--> 
124<#function getFileEntryJson url > 
125   <#assign urljson = url?eval> 
126   <#assign group_id =urljson.groupId /> 
127   <#assign uuid = urljson.uuid /> 
128   <#assign fichero = urljson.title /> 
129   <#assign fileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") > 
130   <#assign DLFichero= fileEntryService.getDLFileEntryByUuidAndGroupId(uuid?string, group_id?eval) />  
131   <#return "/documents/"+group_id+"/"+DLFichero.getFolderId()+"/"+fichero />  
132</#function> 
133 
134<#--Obtener fichero para obtener size, extension....--> 
135<#function getFileEntryInfo url > 
136	<#assign urljson = url?eval> 
137	<#assign group_id =urljson.groupId /> 
138    <#assign uuid = urljson.uuid /> 
139	<#assign fileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") > 
140	<#return fileEntryService.getDLFileEntryByUuidAndGroupId(uuid?string, group_id?eval) />  
141</#function>