2015-01-28 2 views
5

Есть ли способ использовать динамические теги JSP? У меня есть переменная, которая представляет имя тега, и я хочу вызвать тег, но чтобы избежать операторов switch.Вызовите JSP-тег динамически по имени

Пример: У меня есть теги <my:foo attr="fooAttr" /> и тег <my:bar attr="barAttr" />, чем я <c:set var="tagName" value="foo" />. Я хочу как-то использовать переменную tagName для вызова тега.

ответ

2

Я понимаю вашу озабоченность ... Что-то вроде <tags:${ tagname }/>, не так ли? Такое решение действительно заманчиво, но оно предполагает изменение спецификации JSP для принятия динамически названных тегов, которые не являются частью спецификации XML.

«Полусиндинамическое», но простое решение может заключаться в создании тега, который инкапсулирует логику коммутации. Это может выглядеть следующим образом:

<%@ tag body-content="empty" %> 
<%@ attribute name="tagname" required="true" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ taglib tagdir="/WEB-INF/tags" prefix="tags" %> 

<c:choose> 
    <c:when test="${ tagname == 'tag1'}"> 
    <tags:tag1/> 
    </c:when> 
    <c:when test="${ tagname == 'tag2'}"> 
    <tags:tag2/> 
    </c:when> 
</c:choose> 

Тогда вы могли бы использовать (и повторного использования), то там, где вам нравится использовать что-то вроде следующего:

<tags:my-switch tagname="${ tagname }"/> 

Конечно, вы можете добавить любой другой атрибут, возможно, потребуется, и тело тега не должно быть пустым. На самом деле, если вам нужно обработать несколько тегов, измените атрибут body-content выше и обработайте тело, используя стандартный тег <jsp:doBody/>.

Надеется, что это будет удовлетворять ваши потребности ...

Джефф

Смежные вопросы