【问题标题】:Highlight text in JSTL突出显示 JSTL 中的文本
【发布时间】:2016-01-26 19:49:48
【问题描述】:

我需要使用 JSTL 显示文本。有两个数组。

数组 a [一、二、三、九] 数组 b [九,一,二]

显示的文本应该加粗 a 中也在 b 中的元素,其余的保持正常

、三、

<c:forEach var="i" items="${a}">
              <c:forEach var="j" items="${b}">
                  <c:choose>
                      <c:when test="${i==j}">
                          <strong><c:out value="${i}"/></strong>
                      </c:when>
                      <c:when test="${i!=j}">
                           <c:out value="${i}"/>
                      </c:when>
                  </c:choose>
              </c:forEach>
          </c:forEach>

我错过了什么?代码显示一个高亮然后正常显示3次

【问题讨论】:

    标签: java arrays jstl


    【解决方案1】:

    第二个&lt;c:when&gt; 应该是&lt;c:otherwise&gt;

    您可能打算将&lt;strong&gt;&lt;/strong&gt; 围绕 &lt;c:out&gt; 之一。

    此外,您的代码将输出 4 * 3 = 12 个值。这是你的意图吗?
    如果不是,也许将b 更改为ListSet,然后使用b.contains(i) 将是您想要的。


    更新

    如果bCollection,最好是Set,那么这样可以:

    <c:forEach var="i" items="${a}">
        <c:choose><c:when test="${b.contains(i)}">
            <strong><c:out value="${i}"/></strong>
        </c:when><c:otherwise>
            <c:out value="${i}"/>
        </c:otherwise></c:choose>
    </c:forEach>
    

    【讨论】:

    • 不,我只想打印与加粗的第二个向量匹配的 3 个值。还编辑了@。该数组是一个 ArrayList
    • 然后,按照我的建议,将b 更改为Set 并使用contains(),只使用一个循环。
    • 这就是我所拥有的&lt;c:forEach var="i" items="${a}"&gt; &lt;c:forEach var="j" items="${b}"&gt; &lt;c:choose&gt; &lt;c:when test="${i.contains(j)}"&gt; &lt;strong&gt;&lt;c:out value="${i}"/&gt;&lt;strong&gt; &lt;/c:when&gt; &lt;/c:choose&gt; &lt;/c:forEach&gt; &lt;/c:forEach&gt;,但这样保留它会使所有内容加粗。
    • 很抱歉,我做不到。我使用 Set&lt;String&gt; newSet = new HashSet&lt;String&gt;(b); 将 b 更改为 Set 但我不知道如何让它在一个循环中工作。
    • @user10209 您有一个循环,并在其中调用contains(),如更新的答案所示。
    猜你喜欢
    • 2011-08-31
    • 2015-05-29
    • 1970-01-01
    • 2016-06-09
    • 2013-10-25
    • 2012-02-24
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多