以下是我正在尝试的粗略迭代:
<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}而不是属性值。 还有什么其他选择表。?像第一个,最后一个。有文件吗?
答案 0 :(得分:1)
${ table.first? '<table>':'<tr><td><strong>${mainRow.heading}</strong></td></tr>'}
上面的表达式不是您想要的,因为您在EL表达式内的String文字中嵌入了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。
答案 1 :(得分:1)
在您的代码片段中,'<tr><td><strong>${mainRow.heading}</strong></td></tr>'
就JSP而言只是一个字符串,因此无替换。请改用
${ table.first? '<table>':'<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