【问题标题】:c:forEach Iterationc:forEach 迭代
【发布时间】:2013-03-07 11:28:38
【问题描述】:

以下是我正在尝试的粗略迭代:

<c:forEach  items="${row.myList}" var="mainRow" varStatus="table">
        ${ table.first? '<table>':'<tr><td><strong>${mainRow.heading}</strong></td></tr>'}

            <c:forEach items="${mainRow.values}" var="value" >
             <tr>
                <td><input type="checkbox"  value="${value}"/>${value}</td>
              </tr>
            </c:forEach>
             ${ table.last? '</table>':''}
        </c:forEach>

问题是它打印 ${mainRow.heading} 而不是属性值。 还有什么其他选项有表。?喜欢第一个,最后一个。有没有相关文档?

【问题讨论】:

标签: jsp jstl


【解决方案1】:
${ table.first? '<table>':'<tr><td><strong>${mainRow.heading}</strong></td></tr>'}

上面的表达式不是你想要的,因为你在 EL 表达式中的字符串文字中嵌入了一个 EL 表达式。你想要的是

${table.first? '<table>' : '<tr><td><strong>' + mainRow.heading + '</strong></td></tr>'}

<c:choose>
    <c:when test="${table.first}">
        <table>
    </c:when>
    <c:otherwise>
        <tr><td><strong>${mainRow.heading}</strong></td></tr>
    </c:otherwise
</c:choose>

IMO 更长,但更易读。

【讨论】:

  • + 是否适用于 EL 中的字符串连接?另外,为什么您对不匹配的
    元素等没有问题?
  • 感谢您的解决方案,第二个有效并且更具可读性。
  • 另外,如果您可以提出更多建议,现在显示的复选框仅在一列中。我们可以连续有两个复选框吗?我正在尝试与开始,结束,步骤的各种组合......
  • 我直接在jsp中更改(在部署路径中),效果很好。我现在在工作区中进行更改,我的 RAD 在 行中显示错误,说没有结束标记。
    中的类似错误。如何消除此类错误?
  • @Dhananjay:你的编辑器很困惑,因为HTML标签不平衡,但重要的是生成的HTML是有效的。
【解决方案2】:

在您的代码 sn-p 中,'&lt;tr&gt;&lt;td&gt;&lt;strong&gt;${mainRow.heading}&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;' 就 JSP 而言只是一个字符串,因此没有替换。改用这个

${ table.first? '&lt;table&gt;':'<tr><td><strong>'.concat(mainRow.heading).concat('</strong></td></tr>') }

(我不得不使用html实体来避免不匹配的标签。)

其他 varStatus 选项记录在这里:http://docs.oracle.com/cd/E17802_01/products/products/jsp/jstl/1.1/docs/api/javax/servlet/jsp/jstl/core/LoopTagStatus.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 2011-09-27
    • 2012-04-29
    • 2013-04-02
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多