如何将JSTL自定义标记的主体存储到变量中?

时间:2013-04-05 10:45:49

标签: jsp jstl jsp-tags

我想创建一个可以像这样使用的自定义JSP标记:

<mytags:myTag>
    <p>My content!</p>
</mytags:myTag>

在标签中,我想像处理任何其他属性一样处理正文的内容。因此,标签定义看起来像这样 - 但是主体不是属性,而是某些东西其他。

mytag.tag:

<%@taglib prefix="mytags" tagdir="/WEB-INF/tags/mytags" %>
<%@attribute name="body" required="true"%>

<div>
  <c:if test="${fn:contains(body, 'test')}">
    <p>Found test string<p>
  </c:if>
</div>

显然,像<jsp:doBody/><jsp:invoke fragment="body" />之类的东西对我没用。此外,为此目的创建Java标记似乎有点过于复杂。

1 个答案:

答案 0 :(得分:1)

可以使用<jsp:dobody>操作通过var属性捕获正文内容,如this文章中所示。正文内容将作为属性添加到标记文件的pageContext中,并可通过表达式进行访问。

<强> mytag.tag

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<jsp:doBody var="body"/>
<div>
    <c:if test="${ fn:contains(body, 'test') }">
        <p>Found test string</p>
    </c:if>
</div>