Se ha producido un error al procesar la plantilla.
Denied access to method or field getParameter of class org.apache.catalina.core.ApplicationHttpRequest
----
FTL stack trace ("~" means nesting-related):
- Failed at: #local paramValue = request.getParame... [in template "34352066712900#33336#65816767" in function "findMatchedItem" at line 56, column 5]
----
1<#--
2 LANGUAGE HEADER DROPDOWN
3 -->
4<#assign currentURL = themeDisplay.getURLCurrent()>
5<#assign baseURL = themeDisplay.getPortalURL()>
6<#assign relativeURL = currentURL?replace(baseURL, "")>
7
8<#assign translatableParams = ["ics", "ctn"] />
9<#assign matchedItemsCache = buildMatchedItemsCache(translatableParams, locale) />
10
11<#assign desc = themeDisplay.getLanguageId()?split("_")?first >
12<div class="select-btn" id="language-select" role="button" aria-haspopup="listbox" aria-expanded="false" tabindex="0">
13 <#assign siteLanguage = themeDisplay.getLocale().getDisplayLanguage( themeDisplay.getLocale() )?cap_first>
14 <span
15 class="sBtn-text text-uppercase d-flex align-content-center align-items-center">${desc} <span
16 class="fa-solid fa-chevron-down" aria-hidden="true"></span></span>
17</div>
18 <ul class="options hide" role="listbox" aria-labelledby="language-select">
19 <li class="option actives" style="pointer-events:none" role="option" aria-selected="true">
20 <span class="option-text">
21 <svg aria-hidden="true" class="lexicon-icon mr-2 lexicon-icon-${themeDisplay.getLanguageId()?replace('_', '-')?lower_case}">
22 <use href="/o/classic-theme/images/clay/icons.svg#${themeDisplay.getLanguageId()?replace('_', '-')?lower_case}"></use>
23 </svg>
24 ${siteLanguage}
25 </span>
26 </li>
27 <#if entries?has_content>
28 <#list entries as curLanguage>
29 <p>LanguageIdTEST:${curLanguage.getLanguageId()}</p>
30
31 <p>matchedItemsCacheTEST:<@printObject matchedItemsCache /></p>
32 <#assign matchedItemTEST = matchedItemsCache["ics"]!"" />
33 <#assign newValue = matchedItemTEST.value_i18n[curLanguage.getLanguageId()]!matchedItem.value!paramValue />
34 <p>newValue:${newValue}</p>
35
36 <#if !curLanguage.isSelected()>
37
38
39
40 <#assign entryHref = buildTranslatedHref(curLanguage.getURL(), curLanguage.getLanguageId(), translatableParams, matchedItemsCache) />
41 <li class="option" role="option"><span class="option-text"> <a href="${entryHref}" class="language-entry-short-text"
42 lang="${curLanguage.getLanguageId()}">${curLanguage.getLongDisplayName()?capitalize}</a> </span></li>
43
44
45 </#if>
46 </#list>
47 </#if>
48</ul>
49
50
51<#-- ============================================================
52 Traduccion de parametros de la URL al cambiar de idioma
53 ============================================================ -->
54
55<#function findMatchedItem paramName locale>
56 <#local paramValue = request.getParameter(paramName)! />
57 <#if !paramValue?has_content>
58 <#return "" />
59 </#if>
60
61 <#local paramValueTrim = paramValue?trim />
62 <#local paramType = paramName?upper_case />
63 <#local endpointURL = "/c/selectoptions/?languageId=" + locale?string + "&sort=name:asc&filter=optionsType eq '" + paramType + "'" />
64 <#local optionsResponse = restClient.get(endpointURL) />
65
66 <#list optionsResponse.items![] as item>
67 <#local valueI18n = item.value_i18n![] />
68 <#local found = false />
69
70 <#list valueI18n?keys as key>
71 <#if valueI18n[key]! == paramValueTrim>
72 <#local found = true />
73 <#break />
74 </#if>
75 </#list>
76
77 <#if !found && (item.value!"") == paramValueTrim>
78 <#local found = true />
79 </#if>
80
81 <#if found>
82 <#return item />
83 </#if>
84 </#list>
85
86 <#return "" />
87</#function>
88
89<#function buildMatchedItemsCache paramNames locale>
90 <#local cache = {} />
91 <#list paramNames as paramName>
92 <#local cache = cache + {paramName: findMatchedItem(paramName, locale)} />
93 </#list>
94 <#return cache />
95</#function>
96
97<#function translateParamInURL originalURL paramName targetLanguageId matchedItemsCache>
98 <#local paramValue = request.getParameter(paramName)! />
99 <#local matchedItem = matchedItemsCache[paramName]!"" />
100
101 <#if !paramValue?has_content || !matchedItem?has_content>
102 <#return originalURL />
103 </#if>
104
105 <#local rawValueInURL = originalURL?replace(".*[?&]" + paramName + "=([^&]*).*", "$1", "r") />
106
107 <#if rawValueInURL == originalURL>
108 <#return originalURL />
109 </#if>
110
111 <#local urlDecoder = staticUtil["java.net.URLDecoder"] />
112 <#local urlEncoder = staticUtil["java.net.URLEncoder"] />
113 <#local decodedValueInURL = urlDecoder.decode(rawValueInURL, "UTF-8") />
114
115 <#if decodedValueInURL != paramValue?trim>
116 <#return originalURL />
117 </#if>
118
119 <#local newValue = matchedItem.value_i18n[targetLanguageId]!matchedItem.value!paramValue />
120
121 <#if newValue == decodedValueInURL>
122 <#return originalURL />
123 </#if>
124
125 <#local newEncoded = urlEncoder.encode(newValue, "UTF-8") />
126
127 <#return originalURL?replace(paramName + "=" + rawValueInURL, paramName + "=" + newEncoded) />
128</#function>
129
130<#function buildTranslatedHref originalURL targetLanguageId paramNames matchedItemsCache>
131 <#local resultURL = originalURL />
132
133 <#list paramNames as paramName>
134 <#local resultURL = translateParamInURL(resultURL, paramName, targetLanguageId, matchedItemsCache) />
135 </#list>
136
137 <#return resultURL />
138</#function>
139
140
141<#macro printObject obj>
142 <#-- Permite hacer un output de un array de objetos o un objeto que se pasa como parámetro -->
143 <#if obj?is_hash>
144 {
145 <#list obj?keys as k>
146 "${k}":
147 <#assign value = obj[k]>
148 <#if value?is_hash || value?is_sequence>
149 <@printObject obj=value/>
150 <#elseif value?is_boolean>
151 ${value?c}
152 <#elseif value?is_number>
153 ${value}
154 <#elseif value?has_content>
155 "${value?string}"
156 <#else>
157 null
158 </#if>
159 <#if k_has_next>, </#if>
160 </#list>
161 }
162 <#elseif obj?is_sequence>
163 [
164 <#list obj as item>
165 <@printObject obj=item/>
166 <#if item_has_next>, </#if>
167 </#list>
168 ]
169 <#elseif obj?is_boolean>
170 ${obj?c}
171 <#elseif obj?is_number>
172 ${obj}
173 <#elseif obj?has_content>
174 "${obj?string}"
175 <#else>
176 null
177 </#if>
178</#macro>
179
180<#-- ============================================================ -->
181
182<script>
183 $(document).ready(function () {
184 // Toggle el estado del menu de idiomas
185 $('.select-btn').on('click', function () {
186 var expanded = $(this).attr('aria-expanded') === 'true';
187 $(this).attr('aria-expanded', !expanded);
188 $('.options').toggleClass('hide', expanded);
189 });
190
191 // Acciones de teclado para la lupa
192 $('.select-btn').on('keydown', function (e) {
193 if (e.key === 'Enter' || e.key === ' ') {
194 e.preventDefault(); // Evitar desplazamiento al presionar espacio
195 $(this).click(); // Simula el click para abrir/cerrar el menu
196 }
197 });
198
199 // Cerrar el menu al hacer clic en cualquier parte fuera de el
200 $(document).on('click', function (event) {
201 if (!$(event.target).closest('.select-btn, .options').length) {
202 $('.options').addClass('hide');
203 $('.select-btn').attr('aria-expanded', 'false');
204 }
205 });
206
207 // Navegar con las teclas de flecha
208 let options = $('.option');
209 let selectedIndex = 0;
210
211 options.on('keydown', function (e) {
212 if (e.key === 'ArrowDown') {
213 selectedIndex = (selectedIndex + 1) % options.length;
214 options.eq(selectedIndex).focus();
215 }
216 if (e.key === 'ArrowUp') {
217 selectedIndex = (selectedIndex - 1 + options.length) % options.length;
218 options.eq(selectedIndex).focus();
219 }
220 if (e.key === 'Enter') {
221 window.location.href = $(this).find('a').attr('href'); // Redirige a la opcion seleccionada
222 }
223 });
224 });
225</script>
El producto se ha añadido a la cesta de la compra
-50% de descuento*
Si compras la misma norma UNE en distintos idiomas.
*
Dto. sobre el pvp inferior.
Ver condiciones
ISO 16180:2013
Small craft — Navigation lights — Installation, placement and visibility
Loading...
| Fecha edición: |
2013-03-01
En Vigor
|
|---|---|
| Idiomas disponibles: | Francés, Inglés |
| ICS: | 47.080 - Pequeñas embarcaciones |
| CTN: | 54258 |
|
Normas Conjuntas |
|
|
Reemplazo Normas |
Reemplaza a ISO/FDIS 16180 |
Please enter a valid video URL.
The URL can point to any video file or a Youtube video.
El libro en palabras del autor
Ultricies magna feugiat malesuada sociosqu varius vivamus cubilia parturient, himenaeos vitae vehicula nam placerat netus urna platea, nostra rutrum felis mattis penatibus velit quisque.
ButtonNormas citadas
Libros relacionados
Normas relacionadas
Colecciones temáticas relacionadas
Preguntas frecuentes
¿Tienes alguna duda sobre nuestros productos?
Respuesta 2
Desde la web
Libros y normas










