2016-09-07 7 views
0

Я строящему Spring MVC веб-приложение, у меня есть объект с именем NodeRel, который определяется, как показано ниже:JSTL цикл по списку в объекте

public class NodeRel { 
    private String fromNodeId; 
    private String toNodeId; 
    private String fromNodeName; 
    private String toNodeName; 
    private List<QuotaValueOnTime> fromNodeSend; 
    private List<QuotaValueOnTime> toNodeSend; 

    //getters and setters omitted 
} 

В стороне сервера код, я получил список NodeRels и привяжите его к модели. На странице jsp я хочу сначала пройти через список, а затем внутри него, я хочу, чтобы цикл был List. Мой код JSP:

<div class="table-responsive"> 
<table class="table table-striped table-bordered table-hover"> 
    <thead> 
     <tr> 
      <th class="center">Count</th> 
      <th>relation</th> 
      <th colspan='25'>Detail</th> 
     </tr> 
    </thead> 

    <tbody> 
     <c:forEach var="nodeRel" items="${nodeRelInfo}" varStatus="stc"> 
      <tr> 
       <td rowspan="3">${stc.count}</td> 
       <td rowspan="3">${nodeRel.fromNodeName} --> ${nodeRel.toNodeName}</td> 
       <td>\</td> 
       <c:forEach var="x" begin="0" end="23" step="1"> 
          <td>${x}</td> 
       </c:forEach> 
      </tr> 
      <tr> 
       <td>Send_A</td> 
       <c:forEach var="node" items="${nodeRelInfo.fromNodeSend}"> 
          <td>${node.sumval}</td> 
       </c:forEach> 

      </tr> 
      <tr> 
       <td>Send_B</td> 
       <c:forEach var="x" begin="0" end="23" step="1"> 
          <td>${x}</td> 
       </c:forEach> 
      </tr> 
     </c:forEach> 
    </tbody> 
</table> 
</div> 

Мой код не работает, и я получил java.lang.NumberFormatException: Для ввода строки: «fromNodeSend» вблизи второго цикла:

<c:forEach var="node" items="${nodeRelInfo.fromNodeSend}"> 
    <td>${node.sumval}</td> 
</c:forEach> 

Что случилось с моим код?

ответ

2

Обратите внимание, что переменная ${nodeRelInfo} представляет список и переменная ${nodeRel} представляет каждый элемент вы работаете с.

Таким образом, элемент, который вы хотите установить во втором контуре, равен ${nodeRelInfo.fromNodeSend}. Изменение второе имя переменной петельные:

<c:forEach var="node" items="${nodeRel.fromNodeSend}"> 
    <td>${node.sumval}</td> 
</c:forEach> 

Он работает на той же логике, как Java для каждого-цикла.

for (List nodeRel: nodeRelInfo) { 
    // bla blaa 
    for (String node: nodeRel.fromNodeSend()) { 
     System.out.println(node); 
    } 
} 
+0

'fromNodeSend' - это список, а не строка. Хотя я не понимаю, почему ваш ответ был опущен. +1 –

+0

Вы правы 'fromNodeSend()' это список. В этом мой пример. Этот список зацикливается и получает 'node', это' String'. Повторите мой ответ. –

+0

Хорошо. Вы даете деструктивный пример для своего кода JSTL. Получил это :) –

0

изменить ваш второй цикл, как это потому, что ваше имя переменного в родительской петле nodeRel не nodeRelInfo

<c:forEach var="node" items="${nodeRel.fromNodeSend}"> 
    <td>${node.sumval}</td> 
</c:forEach>