- - PR -
arrayタイプのデータを区切って表示
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-26 18:11
「<3>の時は[3]を見る」の「見る」という表現がイマイチわからないのですが・・・。
要するに logic:iterate の動作が期待通りにいかない、もう少し具体的に言うと「indexid で指定した変数が offset で指定した値から始まることを期待しているけど 0 から始まってしまう」ということを問題としているのでしょうか? もし違ったとしても、こういった形で何が問題としているのか具体的に説明するとわかりやすいですよ すると、提示するサンプルコードももっとシンプルにできますよね ![]() であれば logic:iterate についてどういう動作を期待すべきなのか確認するため、ドキュメントをご覧になってはいかがでしょう。 [ メッセージ編集済み 編集者: インギ 編集日時 2006-12-26 18:24 ] | ||||||||
|
投稿日時: 2006-12-26 18:13
ドキュメントはここらへんかな?
http://struts.apache.org/1.2.9/userGuide/struts-logic.html#iterate | ||||||||
|
投稿日時: 2006-12-26 18:21
logic:iterate タグの仕様はよく知らないのですが、ソースを見てみました。
ここらへんですね。 http://svn.apache.org/viewvc/struts/struts1/tags/STRUTS_1_2_9/src/share/org/apache/struts/taglib/logic/IterateTag.java?view=markup まず、indexid をセットしているところを確認すると、
getIndex() から取得した値で初期化していることがわかります。 getIndex() メソッドをみると
とあります。 確かに オフセットを指定している場合はそこから値が始まりそうな気がしますね。 なんででしょう?? Struts のサンプルアプリケーションに indexid と offset を使った例はないでしょうか? あればそれを参考にすると良いかもしれませんね。 [ メッセージ編集済み 編集者: インギ 編集日時 2006-12-26 18:30 ] | ||||||||
|
投稿日時: 2006-12-26 22:54
<logic:iterate id="csvRow" collection='<%= array %>' offset="kai" length="3" indexId="x">
ではなく <logic:iterate id="csvRow" collection='<%= array %>' offset="<%= kai %>" length="3" indexId="x"> でだめでしょうか?試していないので成否は解りかねますが・・・ | ||||||||
|
投稿日時: 2006-12-27 08:08
ということなので試してみたが動かず。 strutsでしたかorz 出勤時間なので続きはまた。 | ||||||||
|
投稿日時: 2006-12-27 14:10
>Struts のサンプルアプリケーションに indexid と offset を使った例はないでしょう>か?
>あればそれを参考にすると良いかもしれませんね。 動的にoffsetの変数が変更するものがサンプルにも見つからず困っています。 | ||||||||
|
投稿日時: 2006-12-27 14:18
これでいけます。
iterateタグのクラスで ページコンテキストからkaiが取得できてないのが原因ですかね。(恐らく なのでoffsetに与える引数をちょっと弄りました。 <% java.util.ArrayList array = new java.util.ArrayList(); array.add("ひ"); array.add("ふ"); array.add("み"); array.add("よ"); array.add("いつ"); array.add("む"); array.add("なな"); array.add("や"); array.add("ここ"); array.add("と"); Integer kai = new Integer(0); int j = 0; int i = 0; while(j < (array.size() / 3)){%> <logic:iterate id="csvRow" collection='<%= array %>' offset="<%= kai.toString() %>" length="3" indexId="x"> <%= kai %>[<%= x %>]<bean:write name="csvRow" /><br> <% i++; %> </logic:iterate> <br> <% j++; kai = i; } %> 手っ取り早くならkaiをIntegerクラスのインスタンスとすればoffsetにkai.toString値入れられますよね。 因みにoffsetの処理アルゴリズムはこんな風になってました。(offsetはStringクラスです。) struts:IterateTag.javaのdoStartTagメソッドより抜粋 if (offset == null) { offsetValue = 0; } else { try { offsetValue = Integer.parseInt(offset); } catch (NumberFormatException e) { Integer offsetObject = (Integer) TagUtils.getInstance().lookup(pageContext, offset, null); if (offsetObject == null) { offsetValue = 0; } else { offsetValue = offsetObject.intValue(); } } } if (offsetValue < 0) { offsetValue = 0; } 追記:このままではarrayの10番目に入っている文字「array.add("と");」は出力されませんので、変更必要かと思われます。(whileの判定条件) [ メッセージ編集済み 編集者: Smz 編集日時 2006-12-27 14:24 ] | ||||||||
|
投稿日時: 2006-12-27 16:21
kai をIntegerのインスタンスにするまでもなかったです。(^^![]() Integer.toString(kai)でいいですね。 |