Как заставить работать динамические атрибуты в файлах тегов JSP? - PullRequest
3 голосов
/ 18 апреля 2009

Итак, согласно моему справочнику по JSP, а также по всем другим ссылкам, которые я могу найти в Интернете, я должен быть в состоянии сделать что-то вроде:

<%@ tag dynamic-attributes="dynamicAttributesVar" %>

и затем, когда кто-то использует атрибут, который я не определил в директиве атрибута, я должен иметь доступ к этому атрибуту из карты «dynamicAttributesVar»:

<%= dynamicAttributesVar.get("someUnexpectedAttribute") %>

Однако это не работает вообще; Я просто получаю ошибку «dynamicAttributesVar не может быть решена» при попытке.

Теперь я обнаружил (просмотрев сгенерированный класс Java для тега), что могу «взломать» рабочую переменную динамических атрибутов, выполнив:

<% Map dynamicAttributesVar = _jspx_dynamic_attrs; %>

Теперь этот хак не работает, если я не использую параметр динамических атрибутов в моей директиве тега, поэтому кажется, что этот параметр выполняет что-то .

Но я хочу знать, как я могу заставить его делать то же, что и для всех остальных пользователей JSP?

Ответы [ 2 ]

5 голосов
/ 23 сентября 2013

Просто пытаюсь получить значок для ответа на четырехлетний вопрос.

У меня тоже есть эта проблема, и на O'Reilly мне помогли использовать JSTL вместо скриптлетов.

Оригинальный автор мог использовать этот код для получения всех ключей / значений:

<c:forEach items="${dynamicAttributesVar}" var="a"> 
${a.key}="${a.value}" 
</c:forEach> 

Это получит конкретное значение:

<c:out value="${dynamicAttributesVar['someUnexpectedAttribute']}"/>
4 голосов
/ 18 апреля 2009

Разве «dynamicAttributesVar» не является именем ключа в контексте страницы, в который помещаются динамические атрибуты? Так что вы могли бы сделать

<c:out value="${dynamicAttributesVar.someUnexpectedAttributes}"/>

или если вы должны использовать скриптлеты:

Map dynamicAttributes = (Map) pageContext.getAttribute("dynamicAttributesVar")

(Отказ от ответственности: я не пробовал, я просто использовал динамические атрибуты в тегах с прямой реализацией Java ... но это кажется разумным)

...