【问题标题】:jstl loop through a list in an objectjstl 循环遍历对象中的列表
【发布时间】:2016-09-07 09:00:46
【问题描述】:

我正在构建一个 Spring MVC Web 应用程序,我有一个名为 NodeRel 的对象,其定义如下:

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,然后在其中循环遍历 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: For input string: "fromNodeSend" 在第二个循环附近:

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

我的代码有什么问题?

【问题讨论】:

    标签: java spring jsp spring-mvc jstl


    【解决方案1】:

    请注意,变量 ${nodeRelInfo} 代表列表,变量 ${nodeRel} 代表您使用的每个项目。

    因此,您要在第二个循环中循环的项目是 ${nodeRelInfo.fromNodeSend}。更改循环变量的第二个名称:

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

    它的工作逻辑类似于 Java for-each 循环。

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

    【讨论】:

    • fromNodeSend 是一个列表,而不是一个字符串。虽然我不明白为什么你的回答被否决了。 +1
    • 你是对的fromNodeSend() 它是列表。这就是我的例子的重点。这个列表被循环并得到node,即String。请再次阅读我的回答。
    • 好的。您正在为他的 JSTL 代码提供破坏性示例。明白了:)
    • 我很确定你完全误解了我的回答:)
    【解决方案2】:

    像这样改变你的第二个循环,因为你在父循环中的变量名是 nodeRel 而不是 nodeRelInfo

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

    【讨论】:

      猜你喜欢
      • 2011-08-19
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 2013-05-29
      • 2015-06-27
      • 2019-08-07
      • 2016-11-21
      • 2012-12-25
      相关资源
      最近更新 更多