按名称动态调用JSP标记

时间:2015-01-28 13:46:17

标签: jsp dynamic tags

有没有办法动态使用JSP自定义标签? 我有一个代表标签名称的变量,我想调用标签,但要避免使用switch语句。

示例: 我有<my:foo attr="fooAttr" />标签和<my:bar attr="barAttr" />标签,而不是<c:set var="tagName" value="foo" />。我想以某种方式使用tagName变量来调用标记。

1 个答案:

答案 0 :(得分:2)

我理解你的担忧...... findLastVisibleItemPosition之类的东西,不是吗?这样的解决方案确实很诱人,但它将涉及修改JSP规范以接受不属于XML规范的动态命名标记。

A&#34; semidynamic&#34;但简单的解决方案可能包括创建一个封装切换逻辑的标签。它可能看起来像:

<tags:${ tagname }/>

然后您可以使用(并重复使用)它,使用以下内容:

<%@ 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标准标记处理正文。

希望这能满足您的需求......

杰夫