2013-03-07 69 views
2

以下是粗糙的迭代我想:C:一个foreach迭代

<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

在El你有isFirst或isLast会以一个选项检查第一个和最后一个元素,你可以通过http://docs.oracle.com/javaee/1.4/tutorial/doc/JSTL3.html以获得更好的理解 – 2013-03-07 11:38:57

回答

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> 

这是更长的时间,但更具可读性,海事组织。

+0

EL中的字符串连接是否工作?另外为什么你没有问题与无与伦比的

元素等? – sbk 2013-03-07 12:23:47

+0

感谢您的解决方案,第二个工作,更具可读性。 – Dhananjay 2013-03-07 12:29:18

+0

此外,如果您可以提出更多建议,现在显示的复选框仅在一列中。我们可以连续有两个复选框吗?我试着开始,结束,步骤的各种组合... – Dhananjay 2013-03-07 12:31:11

1

在你的代码片段中,就JSP而言,'<tr><td><strong>${mainRow.heading}</strong></td></tr>'只是一个字符串,因此没有替换。用这个代替

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

(我不得不使用HTML实体,以避免无法比拟的标签)

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