【问题标题】:Wrap an html element conditionally in JSTL在 JSTL 中有条件地包装一个 html 元素
【发布时间】:2013-08-16 11:22:58
【问题描述】:

我需要在 JSTL 中有条件地包装一个 html 元素。

例如,我需要根据条件将部分文本转换为链接,如下所示。

<c:if test="${not empty link}">
    <a href='${link)" target="_blank">
</c:if>
    ${value}
<c:if test="${not empty value.link}">
    </a>
</c:if>

显然上面的代码是无效的。我实际上正在寻找一些巧妙的方法来做到这一点。

<c:wrap_if element="a" href="${link}" target="_blank">
    ${value}
</c:wrap_if>

是否已经有类似的标签可用。我应该自己写吗?还是有更好更清洁的方法来做到这一点?

【问题讨论】:

  • 为什么您的代码无效?将第二个not empty value.link 更改为仅not empty link
  • 我的代码无效,因为它不是有效的 xml,不是因为我使用 value.link。
  • 我相信您已经在使用最佳解决方案了。

标签: html spring jsp spring-mvc jstl


【解决方案1】:

你可以用这样的结构来做到这一点:

<c:choose>
   <c:when test="${not empty link}">
      <a href="${link}" target="_blank">${value}</a>
   </c:when>
   <c:otherwise>
      ${value}
   </c:otherwise>
</c:choose>

【讨论】:

  • 我对这种方法不太满意,主要是因为我必须多次重复输出值的逻辑。如果 ${value} 不是那么简单,那将是一个真正的痛苦。
  • 如果你有非简单的 ${value} 你可以在之前计算它并设置为变量:
  • 在这种情况下,最好生成一个带值的跨度。如果 ${not empty link} 将特殊类分配给 span。之后编写小的 jquery 代码,它将检查该类的跨度并用“a”元素包装它
【解决方案2】:

你也可以用这个-

    <c:set var="myHtml" value="${value}" />
    <c:if test="${not empty link}">
      <c:set var="myHtml" value="<a href='${link)' target='_blank'>${value}</a>" />
    </c:if>
    ${myHtml}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 2016-04-18
    • 2011-09-08
    • 2020-11-06
    相关资源
    最近更新 更多