Как заставить работать динамические атрибуты в файлах тегов 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']}"/>
Другие вопросы по тегам