- PR -

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

投稿者投稿内容
moc
会議室デビュー日: 2003/09/12
投稿数: 13
投稿日時: 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タグは、どう書けば取得表示できるのでしょうか?
moc
会議室デビュー日: 2003/09/12
投稿数: 13
投稿日時: 2003-09-19 13:41
自己レス?でないですが、補足させて頂きます。。
pageContext.findAttributeのエラーがjsp側ででるのですが
logicタグを使用して、表示させる場合、
public class IterateItems extends BodyTagSupport {
といった、クラスを作成しないと使えないものなんでしょうか?
PAL
ベテラン
会議室デビュー日: 2002/11/14
投稿数: 63
投稿日時: 2003-09-19 14:23
引用:

mocさんの書き込み (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);



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をみればもっと分かると思います。
moc
会議室デビュー日: 2003/09/12
投稿数: 13
投稿日時: 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おかしいところありますでしょうか?
よろしくご教示お願い致します。
PAL
ベテラン
会議室デビュー日: 2002/11/14
投稿数: 63
投稿日時: 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"/>
とかしていませんか?
moc
会議室デビュー日: 2003/09/12
投稿数: 13
投稿日時: 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タグでは取得できないものなのでしょうか?
以上、よろしくご教示お願い致します。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-09-19 18:32
引用:

mocさんの書き込み (2003-09-19 18:05) より:
<jsp:useBean id="testFormBean" class="aaa.view.viewhelper.VxxxxSrch" scope="session" />



今出ているエラーについては、これが問題ではないでしょうか。logic:iterateがどのような
順番でscopeを見ていくのかわかりませんが、おそらくこのuseBeanで生成されたsession
スコープのオブジェクトを参照しているように思います。まずこれを外してみましょう。

もしかすると最初のエラーが復活してしまうかもしれませんが。
PAL
ベテラン
会議室デビュー日: 2002/11/14
投稿数: 63
投稿日時: 2003-09-19 18:50
引用:

mocさんの書き込み (2003-09-19 18:05) より:
<jsp:useBean id="testFormBean" class="aaa.view.viewhelper.VxxxxSrch" scope="session" />



これ、不要ですよ?

※すいません、かぶっちゃいました。。。。

[ メッセージ編集済み 編集者: PAL 編集日時 2003-09-19 18:50 ]

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