当前位置 : 主页 > 编程语言 > java >

按名称动态调用JSP标记

来源:互联网 收集:自由互联 发布时间:2021-06-25
有没有办法动态使用JSP自定义标签? 我有一个代表标签名称的变量,我想调用标签,但要避免使用switch语句. 例: 我有标签 my:foo attr =“fooAttr”/和标签 my:bar attr =“barAttr”/,比我有 c:
有没有办法动态使用JSP自定义标签?
我有一个代表标签名称的变量,我想调用标签,但要避免使用switch语句.

例:
我有标签< my:foo attr =“fooAttr”/>和标签< my:bar attr =“barAttr”/>,比我有< c:set var =“tagName”value =“foo”/>.我想以某种方式使用tagName变量来调用标记.

我理解你的担忧…像< 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 />处理主体.标准标签.

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

杰夫

网友评论