- ベストアンサー
JSPでbeanプロパティ(配列)をgetする方法
- JSPでbeanプロパティ(配列)をgetするための方法について教えてください。
- 具体的には、下のコードの(1)の箇所の記述方法がわかりません。
- getIntSuryo()メソッドの括弧内にindexを入れてみましたが、エラーとなりました。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず、 <td><jsp:getProperty name="E" property="intSuryo[i]" />個</td> は <td><%=E.getIntSuryo()[i]%>個</td> これでいいと思います。 property="intSuryo[i]" Engineクラスにはこのようなプロパティは存在しないのでエラーが出ると思いますよ。
その他の回答 (1)
- akane_210
- ベストアンサー率60% (3/5)
Engineクラスの表記のしかたがおかしい気がしますが。。 いまいち何がしたいのかわかりませんが、 どのようなエラー(結果)がでてるのかを示していただけると、他の方も回答がしやすいと思います。 とりあえず、Engineクラスにデフォルトコンストラクターが無いのは問題だとおもいますよ。 <jsp:useBean id="E" scope="page" class="myPack.Engine" /> でインスタンスが作成できませんので。。
お礼
akane_210さん、回答ありがとうございます。 JSPの練習の一環として、JavaBeansの配列変数に入っている計算結果をJSPから呼び出すということをしています。 それをテーブルタグ内に表示させてみようとなったわけです。 >Engineクラスにデフォルトコンストラクターが無いのは問題だとおもいますよ。 JavaBeansでは、引数の無いコンストラクタが必要であるということですよね? 私の誤解の可能性が高いですが、 コンストラクタをまったく定義しない場合、 自動的に引数の無いコンストラクタが作られているという認識を持っていたため、 コンストラクタらしきものは書いておりません。 というか引数の無いコンストラクタと言われても・・・(^^;)という感じでした。 その後、少し変更を加えました。 <%for (int i = 0; i < E.getIntSuryo().length; i++) {%> <tr> <td><jsp:getProperty name="E" property="intSuryo[i]" />個</td> </tr> <%} %> このようにループ処理に変えてみました。 現在は、次のエラーが出ています。 E' has no get method for 'intSuryo[i]' やはり、Engineクラスできちんとコンストラクタを作っていないからでしょうか? エラーを読む限りではメソッドが無いと言われていますが、 なんのメソッドが必要なのかわかりません。。。 もしお気づきの点がありましたら、再び教えていただければ幸いです。
お礼
akane_210さん、たびたびありがとうございます。 <td><%=E.getIntSuryo()[i]%>個</td> ふむふむ。こういう書き方をするのですね。 書き方もなかなかわからず困っていました。 試してみましたが、エラーには変化がありませんでした。 >property="intSuryo[i]" >Engineクラスにはこのようなプロパティは存在しないのでエラーが出ると思いますよ。 うーむ。この辺りもわかっていない(勘違い)のかもしれませんが、 public int[] getIntSuryo() { return intSuryo; } この一節で、それを定義しているものだと思っていました。 同じ書き方でint型のプロパティを、JSPでgetできたもので。 配列型のプロパティの宣言(?)というのは、 Engineクラスにどのように書けばよいのでしょうか?
補足
お礼に書いてしまったので、補足に書かせていただきます。 結論から書きますと、E.getIntSuryo()[i]という書き方のままで値を取得できるようになりました。 ただ、JavaBeansのgetプロパティのソース部分を、一度消しもう一度作った後に、動くようになりました。 それしか行っていないので、正直、原因はわかりませんでした。 ありがとうございました。