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 に答える