今だけ人気マンガ100円レンタル特集♪

こんにちわ。

表題の件ですが、下のようなbeanファイルとjspファイルの構成です。
--AAA.JSP--
<jsp:useBean id="E" scope="page" class="myPack.Engine" />
・・・・途中をかなり略・・・・
<td><%= E.getIntSuryo() %></td> <========(1)

Engineクラス(bean側)
package myPack;

public class Engine {
int intSuryo[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
}

public int[] getIntSuryo() {
return intSuryo;
}
--------------ここまで-------------

ここで、(1)の箇所の記述の仕方がわかりません。
インデックスを指定して、1~10までを表にしようと思っています。
getIntSuryo()の括弧内にindexを入れてみましたが、
エラーとなり怒られました。

どなたかご存知の方、教えてください。

A 回答 (2件)

とりあえず、



<td><jsp:getProperty name="E" property="intSuryo[i]" />個</td>




<td><%=E.getIntSuryo()[i]%>個</td>

これでいいと思います。

property="intSuryo[i]"

Engineクラスにはこのようなプロパティは存在しないのでエラーが出ると思いますよ。

この回答への補足

お礼に書いてしまったので、補足に書かせていただきます。

結論から書きますと、E.getIntSuryo()[i]という書き方のままで値を取得できるようになりました。
ただ、JavaBeansのgetプロパティのソース部分を、一度消しもう一度作った後に、動くようになりました。
それしか行っていないので、正直、原因はわかりませんでした。

ありがとうございました。

補足日時:2006/08/10 07:33
    • good
    • 0
この回答へのお礼

akane_210さん、たびたびありがとうございます。

<td><%=E.getIntSuryo()[i]%>個</td>
ふむふむ。こういう書き方をするのですね。
書き方もなかなかわからず困っていました。
試してみましたが、エラーには変化がありませんでした。

>property="intSuryo[i]"
>Engineクラスにはこのようなプロパティは存在しないのでエラーが出ると思いますよ。
うーむ。この辺りもわかっていない(勘違い)のかもしれませんが、
public int[] getIntSuryo() {
return intSuryo;
}
この一節で、それを定義しているものだと思っていました。
同じ書き方でint型のプロパティを、JSPでgetできたもので。

配列型のプロパティの宣言(?)というのは、
Engineクラスにどのように書けばよいのでしょうか?

お礼日時:2006/08/09 07:31

Engineクラスの表記のしかたがおかしい気がしますが。



いまいち何がしたいのかわかりませんが、
どのようなエラー(結果)がでてるのかを示していただけると、他の方も回答がしやすいと思います。

とりあえず、Engineクラスにデフォルトコンストラクターが無いのは問題だとおもいますよ。

<jsp:useBean id="E" scope="page" class="myPack.Engine" />

でインスタンスが作成できませんので。。
    • good
    • 0
この回答へのお礼

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クラスできちんとコンストラクタを作っていないからでしょうか?
エラーを読む限りではメソッドが無いと言われていますが、
なんのメソッドが必要なのかわかりません。。。

もしお気づきの点がありましたら、再び教えていただければ幸いです。

お礼日時:2006/08/08 16:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QJavaBeansの配列の値取得方法について

いつもお世話になっております。

JavaBeansで値を計算し、多次元配列に格納しています。
それをjsp側で受け取る方法がどうしてもわからずに困っています。
ちなみにサーブレットは使用していません。

[JavaBeans:]
               ・
               ・
               ・
public class FallPersonSQL {

public int check[][] = new int[7][4];

public int[][] getCheck(){

               (略)
return check;
}
}
********************************************************
[jsp:]
               ・
               ・
               ・ 
<input
type="text"
value="<jsp:getProperty name="fallperson" property="check" />"
/>
               ・
               ・
               ・
これだけですと、[[I@1fc7299 や [[I@198c113 と更新するたびに値が変わり表示されます。

・Beanの取得の宣言方法が根本的に違っているのでしょうか?

・いったんjsp側で配列に格納し直さなければならないのでしょうか?

・Beanの作成時になにか行わなければならないのでしょうか?

どなたがご教授のほどよろしくお願いいたします。

いつもお世話になっております。

JavaBeansで値を計算し、多次元配列に格納しています。
それをjsp側で受け取る方法がどうしてもわからずに困っています。
ちなみにサーブレットは使用していません。

[JavaBeans:]
               ・
               ・
               ・
public class FallPersonSQL {

public int check[][] = new int[7][4];

public int[][] getCheck(){

               (略)
return check;
}
}
*****...続きを読む

Aベストアンサー

お世話になります。

Beanの中で
public int[][] getArray(){
return …
}
みたいな,配列を返すメソッドがありますよね?


んで,JSPで,
<jsp:useBean id="test" class="SampleTest" scope="page"></jsp:useBean>
とやってた場合,

<%
int[][] sample = test.getArray();
for(int i=0; i<sample.length() ; i++)
{
for(int j=0 ; j<sample[i].length() ; j++)
{
out.println(sample[i][j]);
out.println("<BR>"); //これはおまけ
}
}
%>

で出力できたと思いますが,
違ってたらごめんなさい。

Qservletからjspへオブジェクトの配列情報を送る方法

いつもお世話になっております。echo2002です。

さて、今回は以下のような処理を行いたいのですが、可能なのでしょうか?
”servletで作成したオブジェクトの配列をjspにforwardして表示させる”

こんなような処理を考えています。

構成:FileListServletクラス, FileInfomationクラス, disp.jsp

FileInfomationクラスではファイル名やファイルサイズなどの情報を持ち、
それぞれgetなどのアクセサメソッドを持つとします。

FileListServletクラスでの処理
FileInfomationクラスの配列を作成し、各情報をsetする。
HttpServletRequestにsetAttributeでFileInfomation情報を付加し、
disp.jspへforwardする。

※以下の方法を考えています。
request.setAttribute("fileinfo1", fileinfo[0]);
request.setAttribute("fileinfo2", fileinfo[1]);
request.setAttribute("fileinfo3", fileinfo[2]);
・・・
(配列でsetAttributeできるのかわからなかったので、
 とにかくファイルの数分setAttributeしてみました)

getServletContext().getRequestDispatcher("/disp.jsp").forward(req, res)

わからないこと:
disp.jspでどのようにFileInfomationの情報を取得し、
内容を参照できるのかがよくわからないのです。
jspの暗黙オブジェクトrequestを使用して、request.getParameterをすると、
返ってくる値がStringのようなので、FileInfomationクラスにならないんですよね?

突っ込みどころ満載の質問かと思いますが、何かアドバイス頂ければと思います。
オブジェクトの配列をsetAttributeしてjspで読み出せる方法があれば、
それもご教授いただけますでしょうか。
よろしくお願いいたします。jsp難しいです・・・。

いつもお世話になっております。echo2002です。

さて、今回は以下のような処理を行いたいのですが、可能なのでしょうか?
”servletで作成したオブジェクトの配列をjspにforwardして表示させる”

こんなような処理を考えています。

構成:FileListServletクラス, FileInfomationクラス, disp.jsp

FileInfomationクラスではファイル名やファイルサイズなどの情報を持ち、
それぞれgetなどのアクセサメソッドを持つとします。

FileListServletクラスでの処理
FileInfomationクラスの配列を作成し、...続きを読む

Aベストアンサー

setなんちゃらメソッドで値を設定したら、getなんちゃらメソッドを呼べば良かったのです。つまり、set/get以下が同名のメソッド同士をセットで使えば良いのです。
今回の場合は、getAttributeメソッドですね。
戻り値はObjectですがこれはキャストすれば良いのです。
FileInfomation 変数 = (FileInfomation)request.getAttribute("fileinfo1");
てな具合です。

なお、getParameterメソッドは、クライアント(ブラウザ)から送信されたパラメータを取得するメソッドです。

さて、話を次の段階に進めて、配列を受け渡しできるか?となりますが、、できます。
サーブレット側で、
request.setAttribute("キー文字列", fileinfo);
として、JSP側で、
FileInfomation[] 変数 = (FileInfomation[])request.getAttribute("キー文字列");
とすれば、良いのです。

QJSPの処理の途中で、JavaScriptの処理をしたい

プログラムをJSPで記述している(<% %>タグ)のですが、
JavaScriptのalertやconfirmなどのポップアップするダイアログを
表示したいのです。それは可能なのでしょうか?

Aベストアンサー

No.2の回答に対する回答(変な日本語ですが)です。

JSPとJavaScriptの処理の行われる順番について考えていないと
エラーになることがありますよ。
大まかな流れは、
 JSPのソースをサーバ側で解釈、実行する(HTMLのソースを吐き出す)
  ↓
 クライアントに生成したソースを送信する
  ↓
 クライアント側のブラウザがソースを解釈する
  ↓
 ソースの中のJavaScriptを、ソースの上のほうから順次実行する
  ↓
 同時に、通常の表示(HTMLの解釈)も実行される

 と、こういう流れですので、例えば、JavaScriptで値を入力し、
JSPでその値を使おうとすると、エラーとなります。

 具体的にやりたいこと(やろうとしていること)を書いていただいたほうが
適切に回答できますが、上記が今考えられるエラーの原因です。

QJSPでリンクを利用してパラメータを次画面に渡す方法について。

一覧表示されているデータのNOをクリックすると、二つのパラメータでデータベースへアクセスし、該当データの詳細画面に遷移する、というプログラムを作っています。

データベースへアクセスする際に必要なIDは2つで、仮にID_A、ID_Bとします。
リンク部分のソースは

---------------------------------------------------------------------
<a href = "update_form.jsp?ID_A=<%= rs.getString("ID_A") %>">番号</a>
<input type="hidden" name="ID_B" value="<%= rs.getString("ID_Bcat_id") %>">
---------------------------------------------------------------------

としておりますが、次画面へ遷移すると、ID_Bの値はnullとなってしまうために、正常にデータの取得ができません。

二つのパラメータを使用する場合のパラメータを渡す方法を教えて頂きたいと思います。よろしくお願いします。

一覧表示されているデータのNOをクリックすると、二つのパラメータでデータベースへアクセスし、該当データの詳細画面に遷移する、というプログラムを作っています。

データベースへアクセスする際に必要なIDは2つで、仮にID_A、ID_Bとします。
リンク部分のソースは

---------------------------------------------------------------------
<a href = "update_form.jsp?ID_A=<%= rs.getString("ID_A") %>">番号</a>
<input type="hidden" name="ID_B" value="<%= rs.getString("ID_Bcat_id") %>">...続きを読む

Aベストアンサー

<a href = "update_form.jsp?ID_A=<%= rs.getString("ID_A") %>&ID_B=<%= rs.getString("ID_Bcat_id") %>">番号</a>

としてID_Bを&で繋げればMethod="get"で送れますね。
inputタグで送る場合はformタグでactionアトリビュートに飛ぶjspを指定してsubmitボタンかJavaScriptでsubmitさせなければならないと思います。

QArrayListからBean配列に値をセットするには?

お世話になっています。

今うまくいかずに困っていることがありまして、
ご存知の方がいらっしゃいましたら、
ご回答いただけないでしょうか?

質問の内容は以下の通りです。

ArrayListにセットされているデータを
Bean配列にセットするにはどのようにしたら
よいのでしょうか?
自分では以下のようにしているのですが、
デバッグすると落ちてしまいます。


// Bean配列の生成
Bean[] bean = new Bean[arrayListList.size()];

// Iteratorにより要素を取得する
Iterator it = dataList.iterator();

// ヘッダー情報Bean配列の行番号
int i = 0;

// ArrayListのi行目のデータをBeanにキャストし、
// i行目のBean配列にセットする
while(it.hasNext()){
bean[i] = (Bean) dataList.get(i);
i++;
}


ちなみに、キャストしようとしているBeanには
int型の項目があるんですが、そういうのが原因で
落ちるのでしょうか?

ご存知の方がいらっしゃいましたら、ご教授ください。

お世話になっています。

今うまくいかずに困っていることがありまして、
ご存知の方がいらっしゃいましたら、
ご回答いただけないでしょうか?

質問の内容は以下の通りです。

ArrayListにセットされているデータを
Bean配列にセットするにはどのようにしたら
よいのでしょうか?
自分では以下のようにしているのですが、
デバッグすると落ちてしまいます。


// Bean配列の生成
Bean[] bean = new Bean[arrayListList.size()];

// Iteratorにより要素を取得する
Iterator it = dataList.it...続きを読む

Aベストアンサー

こんにちは。
「落ちます」の表現は、他人にはわかりません。
例外が発生しているのであれば、その例外を特定して、情報として掲載してください。

Bean[] bean = new Bean[arrayListList.size()];
と、配列生成時は、arrayListListを利用し、そのあとは、dataListを利用しているのが、すごく気になります。これが原因ではないでしょうか?
それとも、dataListの要素として設定されている値が、Beanクラスオブジェクトではないのが原因だったりしませんでしょうか?
いずれにしても、どう「落ちている」のか、精確に書いていただかないと、、、です。

これは、直接的な話ではありませんが、コーディングに無駄を感じます。
while文でループする度に1増加する変数iを利用しているのならば、Iteratorを使わずに、
for (int i=0; i < dataList.size(); i++) {
 bean[i] = (Bean) dataList.get(i);
}
とした方が、コーディング量が減ります。

また、Listから配列へはtoArrayメソッドを使うともっとコーディング量が減ります。
Bean[] bean = new Bean[dataList.size()];
dataList.toArray(bean);
と言った感じでどうでしょう。

こんにちは。
「落ちます」の表現は、他人にはわかりません。
例外が発生しているのであれば、その例外を特定して、情報として掲載してください。

Bean[] bean = new Bean[arrayListList.size()];
と、配列生成時は、arrayListListを利用し、そのあとは、dataListを利用しているのが、すごく気になります。これが原因ではないでしょうか?
それとも、dataListの要素として設定されている値が、Beanクラスオブジェクトではないのが原因だったりしませんでしょうか?
いずれにしても、どう「落ちている」の...続きを読む

Qフォーム上で押されたボタンによってサーブレットの処理を変えたい

Urizakaです。
さて、さっそく質問です。
JSPの同一フォーム上に「登録」「修正」「削除」のボタンを置き、その押された
ボタンによってサーブレット内での処理が切り替わる(具体的には、違う
SQL文を実行し、違うJSPページをgetRequestDispatcherメソッドで生成
する)ようにしたいのですが、どのようにすればよいのでしょうか?
もちろんそれぞれの処理に対して別々のサーブレットを作り、javaScript
でそれぞれのサーブレットへ飛ぶように制御するという処理も考えたことは
考えたのですが、できれば一つのサーブレットで済ませたいと考えたもので
…宜しくお願いします。

Aベストアンサー

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

---------------------------------------------------

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=MySubmit>
</form>

<script language="JavaScript">
function func(MyCommand){
document.MyForm.MySubmit.value=MyCommand;
document.MyForm.submit();
}
</script>

■Servletでの処理
// リクエストの取得
String MyAction = req.getParameter("MySubmit");

// 処理の実行
if (MyAction.equals("Toroku")){...}
if (MyAction.equals("Shusei")){...}
if (MyAction.equals("Sakujo")){...}



---------------------------------------------------

こんな感じでどうでしょうか。
ちなみにこうやって書いておくと、フォームのボタンからじゃなくても
アンカーをクリックすることで同じ効果が出せそうな……

<a href="JavaScript:func('Toroku')">登録</a>

あ、でもまたボロが出そうなのでこの辺で(^_^;)

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

---------------------------------------------------

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=M...続きを読む

QEclipseでのJDBCドライバについて

Eclipse3.1でデータベース(mysql)にアクセスするプログラムを作ったのですが下記のエラーが出ます。

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

これはJDBCドライバのセットアップがうまく出来ていないからなのでしょうか?
またEclipseでは、~.jarというファイルをプロジェクトのWEB-INFのlibフォルダに入れれば使える印象があるのですが、参考書(EclipseのではなくJAVAなどの)などにあるようにTomcatのインストールフォルダ以下common/libに入れて環境変数を変更しないといけないのでしょうか?

ご存知の方教えてください、よろしくお願いします。

Aベストアンサー

WEB-INF以下に入れると実行はできるのですが、エクリプスが.javaファイルをコンパイルすることができません。projectの一覧を右クリックしてpropertyを選択し、ダイアログ右側からJava Build Pathを選択し、タグからLibrariesを選び、Add JARsボタンをおして.jarファイルを登録して下さい。
たぶんこれでコンパイルできるはずです。

QJava-jspの画面入力値保持について

画面にテキスト、ラジオボタン、リストボックス とボタンがあります。
ボタンを押すと、JAVAで処理を行い、jspのviewで表示します。

1.テキスト、ラジオボタン、リストボックスなどに値が入力、設定されている状態で
ボタンを押して処理後にテキスト、ラジオボタン、リストボックスの値が
変わらないようにしたいのですが、
その場合、たとえば、入力、設定値をセッションになどに格納しておき
jspの所で、セッションから値を設定すると言うような方法になるのでしょうか?

2.ボタン押して処理後、ラジオボタン、リストボックスの選択値も
  変えないようにしたいのですが、
  これはどのように実現するのが、適切なのでしょうか?


以上、よろしくお願いします。

Aベストアンサー

ボタンというのはフォームのサブミットボタンのことですよ?
つまり、画面遷移が起きることを前提とすると(元の同じ画面に戻るのも含みます)

テキスト、ラジオボタン、リストボックスの状態を「要求パラメータ」として
送信し、それを次画面に反映するというのが最も一般的な方法です。

フレームワーク struts のアクションフォーム&JSPカスタムタグを使うと比較的楽に
そういう画面が作れますが、多くのフレームワークでも大差ありません。
簡単な画面なら素のサーブレート+JSPでも十分作れます。

セッションでもできますが、 セッションはログイン情報などの保持など、
限定された範囲で使うのが普通です。また、結局セッションに最新の
テキスト、ラジオボタン、リストボックスの状態を送るには、「要求パラメータ」
を送信する必要があります。

AJAXを使うという方法もあります。この場合、ボタンは AJAX 処理だけを行い
画面遷移を起こさないので、サーバ側で画面のテキスト、ラジオボタン、
リストボックスの状態をもつ必要はありません。

QjspでのArrayListの値の表示

jsp上でBeanで以下のように設定されている

ArrayList<ArrayList<Integer>> a;
a.add(new ArrayList<Integer>);
a.add(new ArrayList<Integer>);
a.add(new ArrayList<Integer>);
a.get(0).add(0);
a.get(0).add(1);
a.get(1).add(2);
a.get(1).add(3);
a.get(1).add(4);
a.get(1).add(5);
a.get(2).add(6);
a.get(2).add(7);
a.get(2).add(8);

aのような行と列が不定のArrayListの全ての値をjspの画面上に

 値 値 値
 0  2  6
 1  3  7
   4  8
   5

といったようにテーブルで表示したいのですがjspにどのような既述をすればよいでしょうか?
クリックしたときの処理などの導入や項目を増やすなど拡張する場合があるので
以下のような形とレイアウトが同じようになると望ましいです

<td>
<table>
<tr>値</tr>
<tr>0</tr>
<tr>1</tr>
<tr>2</tr>
</table>
</td>
<td>
<table>
<tr>値</tr>
<tr>3</tr>
<tr>4</tr>
<tr>5</tr>
</table>
</td>
<td>
<table>
<tr>値</tr>
<tr>6</tr>
<tr>7</tr>
<tr>8</tr>
</table>
</td>

jsp上でBeanで以下のように設定されている

ArrayList<ArrayList<Integer>> a;
a.add(new ArrayList<Integer>);
a.add(new ArrayList<Integer>);
a.add(new ArrayList<Integer>);
a.get(0).add(0);
a.get(0).add(1);
a.get(1).add(2);
a.get(1).add(3);
a.get(1).add(4);
a.get(1).add(5);
a.get(2).add(6);
a.get(2).add(7);
a.get(2).add(8);

aのような行と列が不定のArrayListの全ての値をjspの画面上に

 値 値 値
 0  2  6
 1  3  7
   4  8
   5

といったようにテーブルで表示したいので...続きを読む

Aベストアンサー

こんにちは。

>以下のような形とレイアウトが同じようになると望ましいです

タグが構成的におかしいので勝手に直しました。
*インデントに全角スペース使ってます
動きは追って貰えばわかると思いますので説明を割愛します。

 <table border="1">
  <tr>
<%
 // 列分の処理
 for ( int i = 0; i < a.size(); i ++ ) {
%>
   <td valign="top">
    <table>
     <tr>
      <th>値</th>
     </tr>
<%
  // 行分の処理(指定列の行数分)
  for ( int j = 0; j < a.get(i).size(); j ++ ) {
%>
     <tr>
      <td>
       <%=a.get(i).get(j) %>
      </td>
     </tr>
<%
  }
%>
    </table>
   </td>
<%
 }
%>
  </tr>
 </table>

Qequalsの逆

javaで、文字列の場合は比較演算子の「==」は用いずに

if ((str1.getText()).equals(str2)){
(※…str1,2は文字列)

と書きますよね?
この逆で、文字列str1とstr2は等しくないとき、にはif以下の条件文をどのように書けばよいでしょうか?

Aベストアンサー

>if !((str1.getText()).equals(str2)){

あくまで
if(){
}


!(str1.getText()).equals(str2)
が入っているので
if !((str1.getText()).equals(str2)){
じゃなくて
if (!(str1.getText()).equals(str2)){
こう。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング