- PR -

struts:logic:iterateタグでArrayListより取得について

投稿者投稿内容
moc
会議室デビュー日: 2003/09/12
投稿数: 13
投稿日時: 2003-09-19 23:58
ご回答有難うございます。useBeanタグ全部とったのですが
まだだめです。。
エラーは、
org.apache.jasper.JasperException: Cannot create iterator for this collection
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletW--
でした。
以下のように設定して再度やってみたのですが、同じです。
<table>
<logic:iterate id="item" name="testFormBean">
<bean:define id="item" type="aaaa.view.viewhelper.VxxxxSrch" />
<tr>
<td><bean:write name="item" property="txtSystemID"/></td>
</tr>
</logic:iterate>
--
"testFormBean"は、Actionクラスで
request.setAttribute("testFormBean", formlist);してあった名称ですが、
それが、viewhelperクラスだと認識できないような。。。
そのため、bean:defineをいれてみたのですが。。結果は同じくだめです。
--
あまりに、時間かかってるので、場合によっては・・useBeanでしようかとも
思ったのですが、それも又Actionクラスで設定したtestFormBeanを
どうやってとったらよいものなのでしょうか? strutsで作成する場合、
useBeanでdb取得したlistから表示するのはあんまりしないものなんでしょうか?
logicタグ使うのがふつうなんですよね??

わんこ
常連さん
会議室デビュー日: 2003/04/30
投稿数: 46
投稿日時: 2003-09-20 00:25
お役に立つかどうかわかりませんが、
strutsを使ってiterateするときは私は以下のようにしています。


------------------------------------------------

<logic:iterate id="list" name="a">
<bean:write name="list" property="p1"/>
<bean:write name="list" property="p2"/>
</logic:iterate>



------------------------------------------------
List arrayList = new ArrayList();
for(・・・・) {
XXX xxx = new XXX();
xxx.setP1(value1);
xxx.setP2(value2);
arrayList.add(xxx);
}

request.setAttribute("a", arrayList);

------------------------------------------------
XXXクラスは普通にgetter/setterのあるクラスです。

private String p1;

public void setP1(String str) {
p1 = str;
}

public String getP1() {
return p1;
}



------------------------------------------------

これでvalue1とvalue2の一覧が表示されると思いますが・・・
このような構造になっていれば大丈夫ですよね
結局皆さんが言っていることと一緒ですね(すみません



[ メッセージ編集済み 編集者: わんこ 編集日時 2003-09-20 00:31 ]

[ メッセージ編集済み 編集者: わんこ 編集日時 2003-09-20 00:35 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-09-20 01:12
引用:

"testFormBean"は、Actionクラスで
request.setAttribute("testFormBean", formlist);してあった名称ですが、
それが、viewhelperクラスだと認識できないような。。。



logic:iterateのリファレンスを見てください。iterateの対象になるのは、
・Javaオブジェクトの配列
・java.util.Collectionの実装・java.util.Enumerationの実装。
・java.util.Iteratorの実装
・java.util.Mapの実装
のどれかです。したがって最初の通りArrayListをセットすればいいんですよ。

引用:

そのため、bean:defineをいれてみたのですが。。結果は同じくだめです。



意味もわからないままトライアンドエラーしても問題は解決しませんよ。

引用:

あまりに、時間かかってるので、場合によっては・・useBeanでしようかとも
思ったのですが、それも又Actionクラスで設定したtestFormBeanを
どうやってとったらよいものなのでしょうか?



先ほどのコードでは、スコープが間違っています。セットしたのがrequestで取得が
sessionからでは取れなくて当たり前です。まずStruts云々よりも基本的な事から
勉強してください。

moc
会議室デビュー日: 2003/09/12
投稿数: 13
投稿日時: 2003-09-25 17:58
わんこさん引用で
<logic:iterate id="list" name="a">
これだけだと、Cannot find bean list in scope
というエラーが出ますが、
useBeanもしくは、defineで何か設定が必要なのでは
ないでしょうか?
よろしくご教授お願い致します。
moc
会議室デビュー日: 2003/09/12
投稿数: 13
投稿日時: 2003-09-25 18:05
先ほどの書き込みに追加させて頂きます。
Actionクラスでは、
request.setAttribute("list", formlist);
jsp側では
<logic:iterate id="item" name="list" scope="request">
<tr>
<td><bean:write name="item" property="txtSystemID"/></td>
</tr>
</logic:iterate>
と入れてあります。>わんこさんの引用を参考にさせて頂きました。。
--
Cannot find bean list in scope requestエラー
となってしまいます。
何か足りない点などありましたら、ご教授お願い致します。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-09-25 18:29
引用:

mocさんの書き込み (2003-09-25 18:05) より:
先ほどの書き込みに追加させて頂きます。
Actionクラスでは、
request.setAttribute("list", formlist);
jsp側では
<logic:iterate id="item" name="list" scope="request">
<tr>
<td><bean:write name="item" property="txtSystemID"/></td>
</tr>
</logic:iterate>
と入れてあります。>わんこさんの引用を参考にさせて頂きました。。
--
Cannot find bean list in scope requestエラー
となってしまいます。
何か足りない点などありましたら、ご教授お願い致します。


タグライブラリの設定、たとえば
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
は入っていますか?

http://forum.java.sun.com/thread.jsp?thread=331183&forum=45&message=1875501
を読むと、これが原因でそのエラーが出ることがあるようですが…
わんこ
常連さん
会議室デビュー日: 2003/04/30
投稿数: 46
投稿日時: 2003-09-25 23:08
defineもuseBeanもいらないはずですが・・・
requestスコープにちゃんと格納されていればでるはずです。
むしろscope属性もなくてもいけます。

ukさんのおっしゃる通り、taglibの宣言など、順を追って足元の確認もしてみてください。

moc
会議室デビュー日: 2003/09/12
投稿数: 13
投稿日時: 2003-09-25 23:10
ukさん,わんこさん有難うございます。
残念ながら、<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
入れています。いろいろなサイトがあるようですが、なかなか
わかりにくいです。そもそもrequest.setAttribute("list",formlist)と
入れている、その"list"のところですが、これは、ビーン名ということですが
jsp側で指定するだけの名前?なんでしょうか?
てきとうにつけてよいものなんですか?あと、
jsp側でlogicタグに、type=""を入れるものがありましたが、
この場合、どう入れればよいものなんでしょうか?
ご教授お願い致します。

スキルアップ/キャリアアップ(JOB@IT)