2013-03-27 12 views
6

dataTableという名前の属性を文字列のリストであるJSPに渡します。私はこのような直接アイテムを印刷することができc:forEachループ印刷の角括弧区切り文字

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

${dataTable[1][2]} 

出力:C

JSP IのIF出力$ {のdataTable}を使用して属性にはRAW形式でそれをプリントアウト

テーブルを印刷するためにネストされた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 /> 

すべての行の

反復処理時に角括弧が表示される原因は何ですか?アイテムに直接アクセスするときは表示されません。

ありがとうございます!

+0

これはページの正確なコードですか? – clav

+0

はい、私はそれが正しく動作するまで、単純な汎用テーブルを使用しています。 –

答えて

3

${row}の後に余分なスペースがあるため、この行の "toStringed"が<c:forEach var="item" items="${row} ">になり、それを<c:forEach var="item" items="${row}">に変更すると、あなたはうまくいくでしょう。

+0

実際には、余分なスペースが出力の ']'の後に終わったことにも注意してください。 – BalusC

+0

うわー、いいキャッチ。 – Alex

+0

うわー。ありがとうございました! –

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"]]を使用してください。

+0

dataTableは、文字列リストのリストです。属性に入れる前にArrayList > –

+0

として初期化されました。次に、dataTableを初期化するコードを投稿できますか? – Alex

関連する問題