У меня есть собственный тег в файле ".tag", который вычисляет и выводит значение. Поскольку я не могу опубликовать код здесь, давайте предположим простой пример.
Содержимое файла mytag.tag:
<@tag dynamic-attributes="dynamicParameters">
<%@attribute name="key" required="true"%> <%-- this works fine, in spite of dynamic-attributes --%>
<jsp:doBody var="bodyContent/">
<%-- ... here is some code to compute the value of variable "output" --%>
${output}
Вызывающий абонент может легко назвать это так:
<prefix:mytag key="foo">Body content...</prefix:mytag>
Это вставит вывод тега. Но я бы также позволил вызывающей стороне сделать что-то вроде этого:
<prefix:mytag key="foo" var="mytagOutput">Body content...</prefix:mytag>
В этом случае вывод фактически не будет записан, а будет присвоен переменной «mytagOutput», которую затем может использовать вызывающая сторона.
Я знаю, что вызывающая сторона может добиться этого, заключив пользовательский тег в c:set
, но это менее элегантно, чем просто объявить «var». Я также знаю, что директива @variable
с name-from-attribute
может быть использована для достижения этой цели. Но тогда я не знаю, был ли атрибут "var" задан вызывающей стороной или нет. (Если дано, я хочу присвоить ${output}
этой переменной, в противном случае я просто хочу выписать ${output}
.)
Есть ли способ узнать, был ли передан атрибут "var" или нет?
Другим вариантом будет создание второго пользовательского тега, который может называться «getMytag», который всегда ожидает атрибут «var» и просто помещает «mytag» в c:set
. Если я не найду решения здесь, я пойду на это.
(Если этот вопрос уже задавался, пожалуйста, укажите мне на него. Я сделал быстрый поиск, но не нашел похожего вопроса.)