- PR -

struts bean:writeでint出力

1
投稿者投稿内容
usk
会議室デビュー日: 2003/09/22
投稿数: 3
お住まい・勤務地: Chiba⇔Shiba
投稿日時: 2004-11-16 20:57
初めて投稿させて頂きます。

Strutsのbean:writeを使ってint出力ができず悩んでいます。
現状の抜粋を以下に表記します。
カテゴリと言うクラスが持つ要素を一覧で表示させようと
しています。

[Category.java]
private String name;
private int position;
//それぞれgetter, setterがあります。

[ShowCategoryListAction.java]
Vector categoryList = new Vector();
Category c = new Category();
c.setName("hoge");
c.setPosition(1);
categoryList.add(c);
request.setAttribute("categoryList", categoryList);

[showCategoryList.jsp]
<logic:iterate id="categoryList" scope="request" name="categoryList">
<bean:write name="categoryList" property="name"/>
<bean:write name="categoryList" property="position"/>
</logic:iterate>

-------------------------------------------------------
上記のようにしたところ、コンソールにもブラウザにもエラーが
表示されることは無く、<logic:iterate...>の手前までが表示されます。
CategoryクラスのpositionをString型にすると問題なく表示されます。
bean:writeではtoString()が呼ばれて表示されるようなことが
strutsのドキュメントに書いてありましたが、何か初歩的なミスを
犯しているのかうまくいきません。

環境は
Struts1.2.4
Tomcat5.0.27
JDK1.4.2_05
です。

どなたかご教授お願い致します。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-11-16 21:17
Strutsのタグライブラリについてはよく知りませんが、toStringで出力しているのなら、
int型はプリミティブ型なので、toStringは実行できません。代わりにIntegerではだめですか?
usk
会議室デビュー日: 2003/09/22
投稿数: 3
お住まい・勤務地: Chiba⇔Shiba
投稿日時: 2004-11-16 22:01
返信ありがとうございます。

Categoryクラスの
int position;をInteger position;に変更し

ShowCategoryListActionクラスを
c.setPosition(new Integer(1));
に変更しましたが、結果は同じでダメした。

ちなみに以下の記述でindexの0(ゼロ)が表示されると思うのですが、
同じ症状でうまくいきませんでした。
<logic:iterate id="categoryList" scope="request" name="categoryList" indexId="index">
<bean:write name="index"/>
</logic:iterate>
やはり、自分がどこかミスしてるような気がするのですが・・・

この辺りの有効な勉強となるURL等でも結構ですので、教えて頂けたら幸いです。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-11-16 22:06
勉強になる場所、といえば手っ取り早いのはここでしょうか・・・
http://sunsite.tus.ac.jp/pub/apache/struts/source/jakarta-struts-1.2.4-src.zip
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-11-16 22:22
引用:

DeMorganさんの書き込み (2004-11-16 22:01) より:
返信ありがとうございます。

Categoryクラスの
int position;をInteger position;に変更し
ShowCategoryListActionクラスを
c.setPosition(new Integer(1));
に変更しましたが、結果は同じでダメした。


結果は同じっていうことは、何も表示されないということですか? サーバ側に何かログは
出ていませんか? また、ブラウザからHTMLソースを取得したらどのようになっていますか?

引用:

ちなみに以下の記述でindexの0(ゼロ)が表示されると思うのですが、
同じ症状でうまくいきませんでした。
<logic:iterate id="categoryList" scope="request" name="categoryList" indexId="index">
<bean:write name="index"/>
</logic:iterate>


それはそうでしょうね。indexもint型でしょうから。
usk
会議室デビュー日: 2003/09/22
投稿数: 3
お住まい・勤務地: Chiba⇔Shiba
投稿日時: 2004-11-16 23:10
とりあえず解決致しました。

Tomcatのログを見たところ以下のようなエラーが出力されていました。

2004-11-16 22:48:14 StandardWrapperValve[action]: サーブレット action のServlet.service()が例外を投げました
javax.servlet.jsp.JspException: キー org.apache.struts.action.MESSAGE に対するメッセージリソースが見つかりません

"org.apache.struts.action.MESSAGE"に見覚えがあり、struts-config.xmlに
<message-resources parameter="ApplicationResources" key="org.apache.struts.action.MESSAGE" />
を追記し、ApplicationResource.propertiesファイルを配置したところ
正常にintでもIntegerでもpositionの値が表示されるようになりました。

但し、このApplicationResourceファイルとbean:writeでint出力の関係については
不明です。
根本的な解決にはなっておりませんが、有難うございました。

1

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