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 55, 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
30 <#if !curLanguage.isSelected()>
31
32 <p>url:${curLanguage.getURL()}</p>
33 <p>parameter ics:${request.getParameter("ics")}</p>
34 <p>matchedItem en_us:${matchedItemsCache["ics"].value_i18n["en_US"]}</p>
35 <p>${urlCodec}</p>
36 <p>${urlCodec.decodeURL("%2Fnormas%3Fics%3Dtest")}</p>
37 <p>${urlCodec.encodeURL("01 - General Aspects. Terminology.")}</p>
38
39
40 <#assign entryHref = buildTranslatedHref(curLanguage.getURL(), curLanguage.getLanguageId(), translatableParams, matchedItemsCache) />
41 <li class="option" role="option"><span class="option-text"> <a href="${curLanguage.getURL()}" class="language-entry-short-text"
42 lang="${curLanguage.getLanguageId()}">${curLanguage.getLongDisplayName()?capitalize}</a> </span></li>
43
44 </#if>
45 </#list>
46 </#if>
47</ul>
48
49
50<#-- ============================================================
51 Traduccion de parametros de la URL al cambiar de idioma
52 ============================================================ -->
53
54<#function findMatchedItem paramName locale>
55 <#local paramValue = request.getParameter(paramName)! />
56 <#if !paramValue?has_content>
57 <#return "" />
58 </#if>
59
60 <#local paramValueTrim = paramValue?trim />
61 <#local paramType = paramName?upper_case />
62 <#local endpointURL = "/c/selectoptions/?languageId=" + locale?string + "&sort=name:asc&filter=optionsType eq '" + paramType + "'" />
63 <#local optionsResponse = restClient.get(endpointURL) />
64
65 <#list optionsResponse.items![] as item>
66 <#local valueI18n = item.value_i18n![] />
67 <#local found = false />
68
69 <#list valueI18n?keys as key>
70 <#if valueI18n[key]! == paramValueTrim>
71 <#local found = true />
72 <#break />
73 </#if>
74 </#list>
75
76 <#if !found && (item.value!"") == paramValueTrim>
77 <#local found = true />
78 </#if>
79
80 <#if found>
81 <#return item />
82 </#if>
83 </#list>
84
85 <#return "" />
86</#function>
87
88<#function buildMatchedItemsCache paramNames locale>
89 <#local cache = {} />
90 <#list paramNames as paramName>
91 <#local cache = cache + {paramName: findMatchedItem(paramName, locale)} />
92 </#list>
93 <#return cache />
94</#function>
95
96<#function translateParamInURL originalURL paramName targetLanguageId matchedItemsCache>
97
98 <#local matchedItem = matchedItemsCache[paramName]!"" />
99
100 <#if !matchedItem?has_content>
101 <#return originalURL />
102 </#if>
103
104 <#local newValue = matchedItem.value_i18n[targetLanguageId]!matchedItem.value!"" />
105
106 <#if !newValue?has_content>
107 <#return originalURL />
108 </#if>
109
110 <#local redirectEncoded = originalURL?replace(
111 ".*redirect=([^&]+).*",
112 "$1",
113 "r"
114 ) />
115
116 <#local redirectDecoded = urlCodec.decodeURL(redirectEncoded) />
117
118 <#-- sustituye el valor completo del parámetro -->
119 <#local translatedRedirect = redirectDecoded?replace(
120 "([?&])" + paramName + "=[^&]*",
121 "$1" + paramName + "=" + newValue,
122 "r"
123 ) />
124
125 <#local translatedRedirectEncoded = urlCodec.encodeURL(translatedRedirect) />
126
127 <#return originalURL?replace(
128 redirectEncoded,
129 translatedRedirectEncoded
130 ) />
131
132</#function>
133
134<#function buildTranslatedHref originalURL targetLanguageId paramNames matchedItemsCache>
135 <#local resultURL = originalURL />
136
137 <#list paramNames as paramName>
138 <#local resultURL = translateParamInURL(resultURL, paramName, targetLanguageId, matchedItemsCache) />
139 </#list>
140
141 <#return resultURL />
142</#function>
143
144<#-- ============================================================ -->
145
146<script>
147 $(document).ready(function () {
148 // Toggle el estado del menu de idiomas
149 $('.select-btn').on('click', function () {
150 var expanded = $(this).attr('aria-expanded') === 'true';
151 $(this).attr('aria-expanded', !expanded);
152 $('.options').toggleClass('hide', expanded);
153 });
154
155 // Acciones de teclado para la lupa
156 $('.select-btn').on('keydown', function (e) {
157 if (e.key === 'Enter' || e.key === ' ') {
158 e.preventDefault(); // Evitar desplazamiento al presionar espacio
159 $(this).click(); // Simula el click para abrir/cerrar el menu
160 }
161 });
162
163 // Cerrar el menu al hacer clic en cualquier parte fuera de el
164 $(document).on('click', function (event) {
165 if (!$(event.target).closest('.select-btn, .options').length) {
166 $('.options').addClass('hide');
167 $('.select-btn').attr('aria-expanded', 'false');
168 }
169 });
170
171 // Navegar con las teclas de flecha
172 let options = $('.option');
173 let selectedIndex = 0;
174
175 options.on('keydown', function (e) {
176 if (e.key === 'ArrowDown') {
177 selectedIndex = (selectedIndex + 1) % options.length;
178 options.eq(selectedIndex).focus();
179 }
180 if (e.key === 'ArrowUp') {
181 selectedIndex = (selectedIndex - 1 + options.length) % options.length;
182 options.eq(selectedIndex).focus();
183 }
184 if (e.key === 'Enter') {
185 window.location.href = $(this).find('a').attr('href'); // Redirige a la opcion seleccionada
186 }
187 });
188 });
189</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/TR 19693:2018
Surface chemical analysis — Characterization of functional glass substrates for biosensing applications
Loading...
| Fecha edición: |
2018-02-09
En Vigor
|
|---|---|
| Idiomas disponibles: | Inglés |
| ICS: | 71.040.40 - Análisis químico |
| CTN: | 54618 |
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










