2

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

<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} 而不是属性值。还有什么其他选项有表。?喜欢第一个,最后一个。有任何文档吗?

4

2 回答 2

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 更长,但更具可读性。

于 2013-03-07T12:17:24.603 回答
1

在您的代码片段中,'<tr><td><strong>${mainRow.heading}</strong></td></tr>'就 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

于 2013-03-07T12:20:22.963 回答