- - PR -
struts:logic:iterateタグでArrayListより取得について
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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-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 ] | ||||||||||||
|
投稿日時: 2003-09-20 01:12
logic:iterateのリファレンスを見てください。iterateの対象になるのは、 ・Javaオブジェクトの配列 ・java.util.Collectionの実装・java.util.Enumerationの実装。 ・java.util.Iteratorの実装 ・java.util.Mapの実装 のどれかです。したがって最初の通りArrayListをセットすればいいんですよ。
意味もわからないままトライアンドエラーしても問題は解決しませんよ。
先ほどのコードでは、スコープが間違っています。セットしたのがrequestで取得が sessionからでは取れなくて当たり前です。まずStruts云々よりも基本的な事から 勉強してください。 | ||||||||||||
|
投稿日時: 2003-09-25 17:58
わんこさん引用で
<logic:iterate id="list" name="a"> これだけだと、Cannot find bean list in scope というエラーが出ますが、 useBeanもしくは、defineで何か設定が必要なのでは ないでしょうか? よろしくご教授お願い致します。 | ||||||||||||
|
投稿日時: 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エラー となってしまいます。 何か足りない点などありましたら、ご教授お願い致します。 | ||||||||||||
|
投稿日時: 2003-09-25 18:29
タグライブラリの設定、たとえば <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> は入っていますか? http://forum.java.sun.com/thread.jsp?thread=331183&forum=45&message=1875501 を読むと、これが原因でそのエラーが出ることがあるようですが… | ||||||||||||
|
投稿日時: 2003-09-25 23:08
defineもuseBeanもいらないはずですが・・・
requestスコープにちゃんと格納されていればでるはずです。 むしろscope属性もなくてもいけます。 ukさんのおっしゃる通り、taglibの宣言など、順を追って足元の確認もしてみてください。 | ||||||||||||
|
投稿日時: 2003-09-25 23:10
ukさん,わんこさん有難うございます。
残念ながら、<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> 入れています。いろいろなサイトがあるようですが、なかなか わかりにくいです。そもそもrequest.setAttribute("list",formlist)と 入れている、その"list"のところですが、これは、ビーン名ということですが jsp側で指定するだけの名前?なんでしょうか? てきとうにつけてよいものなんですか?あと、 jsp側でlogicタグに、type=""を入れるものがありましたが、 この場合、どう入れればよいものなんでしょうか? ご教授お願い致します。 | ||||||||||||
