Как заставить работать динамические атрибуты в файлах тегов JSP?
Так что, согласно моему справочнику по JSP, а также всем остальным ссылкам, которые я могу найти в Интернете, я должен быть в состоянии сделать что-то вроде:
<%@ tag dynamic-attributes="dynamicAttributesVar" %>
и затем, когда кто-то использует атрибут, который я не определил в директиве атрибута, я должен иметь доступ к этому атрибуту из карты "dynamicAttributesVar":
<%= dynamicAttributesVar.get("someUnexpectedAttribute") %>
Однако это совсем не работает; Я просто получаю ошибку "dynamicAttributesVar не может быть решена", когда я пытаюсь.
Теперь я обнаружил (просмотрев сгенерированный класс Java для тега), что могу "взломать" рабочую переменную динамических атрибутов, выполнив:
<% Map dynamicAttributesVar = _jspx_dynamic_attrs; %>
Теперь этот хак не работает, если я не использую параметр динамических атрибутов в моей директиве тега, поэтому кажется, что параметр что- то делает.
Но я хочу знать, как я могу заставить его делать то же, что и для любого другого пользователя JSP?
2 ответа
Разве "dynamicAttributesVar" не является именем ключа в контексте страницы, в который помещаются динамические атрибуты? Так что вы могли бы сделать
<c:out value="${dynamicAttributesVar.someUnexpectedAttributes}"/>
или если вы должны использовать скриптлеты:
Map dynamicAttributes = (Map) pageContext.getAttribute("dynamicAttributesVar")
(Отказ от ответственности: я не пробовал, я только использовал динамические атрибуты в тегах с прямой реализацией Java... но это кажется разумным)
Просто пытаюсь получить значок для ответа на четырехлетний вопрос.
Я тоже столкнулся с этой проблемой и натолкнулся на помощь в O'Reilly по использованию JSTL вместо скриптлетов.
Исходный плакат мог использовать этот код для получения всех ключей / значений:
<c:forEach items="${dynamicAttributesVar}" var="a">
${a.key}="${a.value}"
</c:forEach>
Это получит конкретное значение:
<c:out value="${dynamicAttributesVar['someUnexpectedAttribute']}"/>