通过名称动态调用 JSP 标签

2023-12-27

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

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


我理解你的担忧......比如<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/>标准标签。

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

Jeff

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过名称动态调用 JSP 标签 的相关文章

随机推荐