Я понимаю вашу озабоченность ... Что-то вроде <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/>
.
Надеется, что это будет удовлетворять ваши потребности ...
Джефф