【问题标题】:c:forEach loop printing square bracket delimitersc:forEach 循环打印方括号分隔符
【发布时间】:2013-03-27 13:28:27
【问题描述】:

我将一个名为 dataTable 的属性传递到我的 JSP 中,它是一个字符串列表的列表。在 JSP 中,如果我输出属性,则使用 ${dataTable} 以原始格式将其打印出来:

[[Header1, Header2, Header3], [A, B, C], [1, 2, 3]]

我可以像这样直接打印一个项目:

${dataTable[1][2]} 

哪个输出:C

然后当我编写一个嵌套的 c:forEach 循环来打印表格时,每行末尾的方括号都包括在内,但整个对象上的方括号不包括在内。

我的代码是:

<c:forEach var="row" items="${dataTable}">
    <c:forEach var="item" items="${row} ">
        <span>${item}</span>
    </c:forEach>
    <br />
</c:forEach>

结果:

        <span>[Header1</span>
        <span> Header2</span>
        <span> Header3] </span>
    <br />
        <span>[A</span>
        <span> B</span>
        <span> C] </span>
    <br />
        <span>[1</span>
        <span> 2</span>
        <span> 3] </span>
    <br />

这几乎就是我想要的,我只是不希望每行的开头和结尾都有方括号。

我遗漏了什么导致这些方括号在迭代时出现,但在我直接访问项目时却没有?

谢谢!

【问题讨论】:

  • 这是您网页上的确切代码吗?
  • 是的,我只是使用一个简单的通用表,直到我让它正常工作。

标签: java jsp jstl


【解决方案1】:

${row} 后面有一个额外的空格,导致列表在这一行 &lt;c:forEach var="item" items="${row} "&gt; 上出现“toStringed”,将其更改为 &lt;c:forEach var="item" items="${row}"&gt;,您就可以开始了。

【讨论】:

  • 确实,还要注意输出中] 之后的多余空间。
【解决方案2】:

你说dataTable 是一个字符串列表——这意味着内部的forEach 标记正在遍历一个字符串。在 Apache JSTL 实现(1.2 源代码here)中,遍历字符串会将其解析为逗号分隔的标记。所以字符串"[A, B, C]"被解析到列表["[A", " B", " C]"'中。

要获得您想要的行为,请尝试使用嵌套列表定义 dataTable,例如[["A", "B", "C"], ["1", "2", "3"]] 而不是 ["[A, B, C]", "[1, 2, 3]"]

【讨论】:

  • dataTable 是一个字符串列表列表,在它被放入属性之前它被初始化为 ArrayList>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 2020-10-27
  • 1970-01-01
  • 2018-03-26
  • 2015-01-04
相关资源
最近更新 更多