2013-03-07 103 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