c:forEach循环打印方括号分隔符

时间:2013-03-27 13:28:28

标签: java jsp jstl

我将一个名为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 />

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

我错过了什么导致这些方括号在迭代时出现,但是当我直接访问某个项目时却没有?

谢谢!

2 个答案:

答案 0 :(得分:3)

${row}之后有一个额外的空格导致列表在此行<c:forEach var="item" items="${row} ">上获得“toStringed”,将其更改为<c:forEach var="item" items="${row}">并且您将会很高兴。

答案 1 :(得分:0)

你说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]"]