- PR -

配列のデータを取得したい。

1
投稿者投稿内容
うるるとさらら
会議室デビュー日: 2003/10/07
投稿数: 9
投稿日時: 2003-11-02 21:17
こんな時間に質問するなんて、大変恐縮です・・・
現在、一週間ほど調査したりいろいろと試したりしていますが、
解決できない(*o*;)以下のような問題に悩まされています。
わかりにくい説明があるかと思いますが、ご教授願います。

■行いたい手順■
@サーバにSQLを発行(社員番号がキー)して、複数件のデータを取得
AsetAttributeで作成したリストを投げる
Ajsp側でiterateを用いてtextタグにデータをデフォルト表示
Bクライアントが業務内容または業務時間を変更
C変更値も含め、すべてのテキストデータを取得して、変更内容確認
 画面を作成する(つまり、textからwriteタグの表現に変わります)

●配列のデータ以外ならば値を取得できるのですが、複数件レコードが表示される
 今回の場合には、indexedを使用しなければ一レコードずつのデータを把握できず、
 次画面に表現できない・・・。という悩みなのです。ですが、indexedタグだと
 思うようにデータが取得できません。以下、実際のコードを簡略化したものです。

*Idには社員番号が入ります

Actionクラス(MenuAction.java)--------------------------------------------

List gyoumuList = new ArrayList();

String str="SELECT SyainNo, Gyoumu, Times FROM T001GyoumuIchiran
WHERE SyainNo=" + Id;
java.sql.ResultSet rs = db.getResultSet(str);
while(rs.next()){
g = new MenuForm();
g.setSyainNo(rs.getString("SyainNo"));
g.setGyoumu(rs.getString("Gyoumu"));
g.setTimes(rs.getString("Times"));
gyoumuList.add(g);
{
request.setAttribute("gyoumuList",gyoumuList);

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

jsp(Nyuuryoku.jsp)-------------------------------------------------------

<bean:define id="glist" name="gyoumuList" type="java.util.List" />
<logic:iterate id="gijutsu" name="glist" type="MenuForm" >
<bean:define id="g" name="gijutsu" type="gyoumu.form.MenuForm" />
<tr>
<th nowrap>
<html:text property="syainNo" size="8" maxlength="10"
name="g" indexed="true" />
</th>
<th nowrap>
<html:text property="gyoumu" size="30" maxlength="40"
name="g" indexed="true" />
</th>
</tr>
</logic:iterate>

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

いろいろ調べましたが、indexedタグは使用しない方がよい。と書いてあったり、
nameとpropertyの値を入れ替えてあったり・・・実践しましたが、うまくいきません。

・・・なんだが問題の焦点があいまいになってしましました。(すいません)
配列データの取得を行いたいが、うまくいかないということです。

私事ですが、現在2人で調査して開発を行っていますが、この部分以外は完成しております。
完成目前にして、工数が足りません・・・。(調査に時間がかかり、何回か納期を延ばして
います・・・)なにとぞ、解決の糸口が欲しい!!!と思うのです。

情報不足かもしれませんが、どうぞよろしくお願いしますm(_ _)m""""""
うるるとさらら
会議室デビュー日: 2003/10/07
投稿数: 9
投稿日時: 2003-11-02 21:36
すいません。自己レスです。開発環境についてです。
JDK: 1.4.1.05
tomcat: 4.1.27
eclipse: 2.1.1(日本語環境 easystruts利用)
struts: 1.1
パルプ
ベテラン
会議室デビュー日: 2003/06/18
投稿数: 59
投稿日時: 2003-11-03 05:52
パルプです。うるるとさららさん、大変お疲れさまです。
私もstrutsは詳しくのないのですが、お力になれればと思い、投稿させていただきます。

配列を取得できないとのことですが、
Nyuuryoku.jspからの値を受けるActionFormはどのようになっていますか?
現在のJSPを評価したhtmlのソースでは、フォームのエレメントの名前が
g[0].shainNoみたいな感じであれば、ActionFormの方でちょっと工夫します。
MenuFormBeanのListにアクセスする感じです。

コード:

List list = new ArrayList();

public void setG(int i, MenuForm form){
  list.set(i, form)
}

public MenuForm getG(int i){
  MenuForm form;
  if(i > list.size() -1){
    for(int j = list.size(); j < i + 1; j++){
       form = new MenuForm();
       list.add(form);
    }
  }
  return (MenuForm)list.get(i);
}



こんな感じでしょうか。
(検証してないので動くかどうか分かりませんが、感じってことで)
もし見当違いであれば無視してください。すいません。

健闘をお祈りしています!
アティ
ベテラン
会議室デビュー日: 2003/08/14
投稿数: 91
お住まい・勤務地: KANAGAWA
投稿日時: 2003-11-03 10:37
お疲れ様です。アティです。
質問の回答じゃないのですが、ちょっと気になったので。
引用:

String str="SELECT SyainNo, Gyoumu, Times FROM T001GyoumuIchiran
WHERE SyainNo=" + Id;


上のやり方はセキュリティ的に問題があるので、
PreparedStatementを使うことをお勧めしますよ。
例)Idに「12345 or 1 = 1」渡された場合
既に使ってましたら、無視しちゃってください。

[ メッセージ編集済み 編集者: アティ 編集日時 2003-11-03 10:37 ]
うるるとさらら
会議室デビュー日: 2003/10/07
投稿数: 9
投稿日時: 2003-11-03 14:33
パルプさん、アティさん、休日にも関わらず、早朝からのレスありがとうございました。

・パルプさん
 パルプさんのコードでうまくいきました!(^o^)ちなみに、ActionBeanでの実装は、
 以下のようになりました。
 -------------------------------------------------------------------
//業務情報
List gyoumuList = new ArrayList();//業務のリスト
int gc = Integer.parseInt(n.getGCount());//業務件数
for(int c=0; c<gc; c++){
MenuForm g = n.getG(c);
NyuuryokuForm gyoumu = new NyuuryokuForm();
gyoumu.setSyainNo(g.getSyainNo());
gyoumu.setGyoumu(g.getGyoumu());
gyoumu.setTimes(g.getTimes());
gyoumuList.add(gyoumu);
}
request.setAttribute("gyoumuList",gyoumuList);
------------------------------------------------------------------
これで、確認画面にhiddenでデータを取らせてやれば、入力画面と同じ
 方法で値も取得できますし、writeで表示もできます!!値が取れる事
 が確認できましたので、これからあせって型チェック等も実装したいと
 思います・・・。

  (涙)本当にありがとうございました!!

・アティさん、Idの件ですが、すぐに実装は時間的に無理そうです・・・
 (すいません)ですが、二次予定が組まれているので、その時に参考
 にさせて頂きます。

  貴重なご指摘、ありがとうございました。


              以後、精進致します!
1

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