- - PR -
struts:logic:iterateタグでArrayListより取得について
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-09-19 10:02
struts1.1+Tomcat4.1.27の環境で、
logic:iterateタグでArrayListより値取得し表示したいのですが、 うまくいきません。ご教示よろしくお願い致します。 -- TestActionクラスでは、以下を設定してあります。 ArrayList listに他のdb値取得用クラスより取得しいれ、その後、 ViewHelperクラスインスタンス生成(xxx) し、list.sizeのループ内で BeanUtils.copyProperties(xxx, list.get(iCnt)); formlist.add(xxx);しており、最後に request.setAttribute("ZZZZZZ", formlist); といったようにリクエストにセットしています。 まず、この場合の上記、"ZZZZZZ"はlistのgetter/setterビーンとして別途 作成する必要があるのでしょうか?そしてその"ZZZZZZ"をjsp側のlogic:iterateタグに nameで入れるわけでしょうか? 上記のケースの場合、 logic:iterateタグ及び、bean:writeタグは、どう書けば取得表示できるのでしょうか? | ||||
|
投稿日時: 2003-09-19 13:41
自己レス?でないですが、補足させて頂きます。。
pageContext.findAttributeのエラーがjsp側ででるのですが logicタグを使用して、表示させる場合、 public class IterateItems extends BodyTagSupport { といった、クラスを作成しないと使えないものなんでしょうか? | ||||
|
投稿日時: 2003-09-19 14:23
formlistクラスに、iterateの内部のprorertyに対応するgetterは存在しますか? <logic:iterate id="iterateID" name="ZZZZZZ"> <bean:write name="iterateID" property="aaa"/> </logic:iterate> とすると、formlist#getaaaはありますか? あと、出来れば実ソースの提示があればもっと分かりやすいかもしれません。 また、strutsのアーカイブに入っているstruts-exercise-taglibのlogic-iterate.jspをみればもっと分かると思います。 | ||||
|
投稿日時: 2003-09-19 15:00
>>TestActionクラスでは、以下を設定してあります。
>>>ArrayList listに他のdb値取得用クラスより取得しいれ、その後、 >>>ViewHelperクラスインスタンス生成(xxx) し、list.sizeのループ内で >>>BeanUtils.copyProperties(xxx, list.get(iCnt)); >>>formlist.add(xxx);しており、最後に >>>request.setAttribute("ZZZZZZ", formlist); >formlistクラスに、iterateの内部のprorertyに対応するgetterは存在しますか? <logic:iterate id="iterateID" name="ZZZZZZ"> <bean:write name="iterateID" property="aaa"/> </logic:iterate> >とすると、formlist#getaaaはありますか? アドバイス有難うございます。 formlistはArrayListとなっております。 ArrayList formlist = new ArrayList(); -- 実ソースの該当一部: DynaValidatorForm xxxxForm = (DynaValidatorForm) form; : ArrayList list = null; int iDispCnt; try { //XXXX検索 dbEntity Modelクラスインスタンス TestSrch testSrch = new TestSrch(); list = testSrch.getSearchResult(aaa,bbb); ArrayList formlist = new ArrayList(); TestFormBean tForm = new TestFormBean(); ↑↑↑↑↑↑↑↑↑追加した↑↑↑↑↑↑↑↑ for (iDispCnt = 0; iDispCnt < list.size(); iDispCnt++) { log.info("selectSource: " + list.get(iDispCnt)); //VxxxxSrch(ViewHelper)の作成 VxxxxSrch vokya = new VxxxxSrch(); BeanUtils.copyProperties(vxxx, list.get(iDispCnt)); formlist.add(vxxx); } /////TestFormBeanでは、listのsetter/getterメソッドを定義しています。 tForm.setList(formlist); ↑↑↑↑↑↑↑↑↑追加した↑↑↑↑↑↑↑↑ //listをHttpServletRequestに格納 request.setAttribute("testFormBean", tForm); ↑↑↑↑↑↑↑↑↑もとは、下記となっていたもの。 //xxxxListはjsp側で設定する名前としてここで決めている。 // request.setAttribute("xxxxxList", formlist); }catch(Exception ex) { // } finally { // } -- 又DynaValidatorForm xxxxFormには、strtus_config.xmlに 全ての表示するpropertyを定義してあります。 そもそもDynaValidatorForm(orDynaActionForm)の時、 上記の方法はどこか不必要orおかしいところありますでしょうか? よろしくご教示お願い致します。 | ||||
|
投稿日時: 2003-09-19 17:28
>//VxxxxSrch(ViewHelper)の作成
>VxxxxSrch vokya = new VxxxxSrch(); >BeanUtils.copyProperties(vxxx, list.get(iDispCnt)); >formlist.add(vxxx); は //VxxxxSrch(ViewHelper)の作成 VxxxxSrch vokya = new VxxxxSrch(); BeanUtils.copyProperties(vokya , list.get(iDispCnt)); formlist.add(vokya ); ですよね? request.setAttribute("xxxxxList", formlist); として、 <logic:iterate id="iterateID" name="xxxxxList"> <bean:write name="iterateID" property="VxxxxSrchのsetter"/> </logic:iterate> で動く気がしますが、、、 って、 >pageContext.findAttributeのエラーがjsp側ででるのですが これって、xxxxxListが見つけられないという事なんで、別の観点ですね。^^; ソースは上記でよいとして、 struts-config.xmlで、 <forward name="success" path="xxxx.do" redirect="true"/> とかしていませんか? | ||||
|
投稿日時: 2003-09-19 18:05
//VxxxxSrch(ViewHelper)の作成
>>VxxxxSrch vokya = new VxxxxSrch(); >BeanUtils.copyProperties(vokya , list.get(iDispCnt)); >>formlist.add(vokya ); >ですよね? 失礼しました。xxxに消してしまってました。 >request.setAttribute("xxxxxList", formlist); >として、 <logic:iterate id="iterateID" name="xxxxxList"> <bean:write name="iterateID" property="VxxxxSrchのsetter"/> </logic:iterate> >で動く気がしますが、、、 >struts-config.xmlで、 <forward name="success" path="xxxx.do" redirect="true"/> >とかしていませんか? しておりません。。 1.以下のように行ってみましたがエラーとなります。 TestActionクラスでは //----------"testFormBean"はjspで設定するビーン名---------// request.setAttribute("testFormBean", formlist); ↑ 何でもよい?? DynaValidatorFormの名称ということはありませんよね? jspでは <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <jsp:useBean id="testFormBean" class="aaa.view.viewhelper.VxxxxSrch" scope="session" /> 及び <table> <logic:iterate id="item" name="testFormBean"> <tr> <td><bean:write name="item" property="txtSystemID"/></td> </tr> </logic:iterate> を入れてあります。txtSystemIDはVxxxxSrchのsetter名称です。 java.lang.ClassCastException at org.apache.jsp--となってしまいます。 2. propertyに設定しないで、formlistに入っている順で全て表示させる方法は どう書けばよろしいのでしょうか? 3. 又そもそもDynaValidatorFormでpropertyに設定している(struts_config.xmlにて)のですが、 その場合も、viewerクラスのようなsetter/getterクラスを作成し セットしてからでないとlogic:iterateタグでは取得できないものなのでしょうか? 以上、よろしくご教示お願い致します。 | ||||
|
投稿日時: 2003-09-19 18:32
今出ているエラーについては、これが問題ではないでしょうか。logic:iterateがどのような 順番でscopeを見ていくのかわかりませんが、おそらくこのuseBeanで生成されたsession スコープのオブジェクトを参照しているように思います。まずこれを外してみましょう。 もしかすると最初のエラーが復活してしまうかもしれませんが。 | ||||
|
投稿日時: 2003-09-19 18:50
これ、不要ですよ? ※すいません、かぶっちゃいました。。。。 [ メッセージ編集済み 編集者: PAL 編集日時 2003-09-19 18:50 ] | ||||
