6

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

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

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

谢谢!

4

2 回答 2

3

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

于 2013-03-27T14:47:46.760 回答
0

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

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

于 2013-03-27T14:18:10.287 回答