![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
はじめまして、当方駆け出しのプログラマです。
JAVA歴2ヶ月で勉強(研修)させてもらっています。
初歩的な質問かもしれませんが、ご返答いただけると幸いです。
勉強して一ヶ月ほどでJSPサーブレットを使った簡単なスケジュールを表示するプログラムを作りました。環境はEclipse(pleiades3.5)+tomcat6.0+jre1.6+mysql5.5.10です。
これをフレームワークに準拠したつくりに移行してくれと上司の方に言われました。
しかし、私が作ったものは、スケジュール表示で日付で参照し、そこからデータベースからとったスケジュールの日付と合致するものがある場合リンクを表示するというものでした。
このためタグライブラリのC:each等の繰り返しは使えないため、スクリプトレットで変数として値を持ってこないと動作しない状態です。
Stringやint型はrequest.getAttributeでもってこれるのはわかったのですがentityに入っている値を持ってくることが出来ずNullになってしまいます。
ソースはこちらになります。
書き出しで説明すると。
DB接続→値を持ってきてentityにセットする→これらをarrayListに格納→arrayListの中身を日付順にソート→entityの配列に収納する→jspに受け渡し→表示できない。
という状況です。
ScheduleMainはentityでSchedule_mainはDBのテーブルです。arrayの部分で日付順になるようにソートをかけてあります。これは理由があってsql内でソートしていません。
scheduleitemsはScheduleItemsというentityで複数個スケジュールを保管できるように配列をゲッターセッター設置してあります。
Action.java
for(int i=0 ; i<schedulemain.size();i++){
ScheduleMain schemain = schedulemain.get(i);
int ID = schemain.getId();
String place = schemain.getPlace();
String schedule = schemain.getSchedule();
int empId = schemain.getEmpId();
int category = schemain.getCategory();
int scheCategory = schemain.getScheCategory();
Date scheduleDay = schemain.getScheduleDay();
Time endtime = schemain.getEndtime();
Time starttime = schemain.getStarttime();
schedule_main.setCategory(category);
schedule_main.setEmpId(empId);
schedule_main.setEndtime(endtime);
schedule_main.setId(ID);
schedule_main.setPlace(place);
schedule_main.setScheCategory(scheCategory);
schedule_main.setSchedule(schedule);
schedule_main.setScheduleDay(scheduleDay);
schedule_main.setStarttime(starttime);
array.add(schedule_main);
}
ScheduleMain[] itembean = (ScheduleMain[])array.toArray(new ScheduleMain[array.size()]);
Comparator asc = new Comparator() {
public int compare(Object obj0, Object obj1) {
String nameKana0 = ((ScheduleMain) obj0).getScheduleDay().toString();
String nameKana1 = ((ScheduleMain) obj1).getScheduleDay().toString();
int ret = 0; // カナの昇順
if ((ret = nameKana0.compareTo(nameKana1)) == 0) {
// カナが同じ場合はIDの昇順
String id0 = ((ScheduleMain) obj0).getStarttime().toString().substring(0,5);
String id1 = ((ScheduleMain) obj1).getStarttime().toString().substring(0,5);
ret = id0.compareTo(id1);
}
return ret;
}
};
scheduleitems.setItembean(itembean);
jsp側ですが。
ScheduleItems scheduleitems = (ScheduleItems)request.getAttribute("Scheduleitems");
で宣言をし、out.printやlengthをとってもnullExeprionになってしまいます。
enteity部分
ScheduleItems.java
package schedule.entity;
import javax.persistence.Entity;
import javax.persistence.Table;
@Entity
@Table(name="schedule_main")
public class ScheduleItems {
public ScheduleMain[] itembean = null;
public ScheduleItems(){
}
public ScheduleMain[] getItembean() {
return itembean;
}
public void setItembean(ScheduleMain[] itembean) {
this.itembean = itembean;
}
}
ScheduleMainは自動生成されるDoltengでDBから生成しました。
entityではだめなのかと思いDtoでも試しましたがやはり同じ症状になってしまいます。
この部分が解決されるだけでかなりの進捗が期待されるのでどうかよろしくお願い致します。
長文失礼しました。よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
scheduleitemsはrequestスコープにセットされていますか?
(Actionクラスのpublicなフィールドとして定義してあるか、そうでなければ明示的なセットを行っていますか?)
ところで
>しかし、私が作ったものは、スケジュール表示で日付で参照し、そこからデータベースからとったスケジュールの日付と合致するものがある場合リンクを表示するというものでした。
>このためタグライブラリのC:each等の繰り返しは使えないため、スクリプトレットで変数として値を持ってこないと動作しない状態です。
とありますが、jstl:if等の条件式で判断は出来ませんか?
(とは言え、どれほど軽微であるにせよ、SAStrutsのMVCで開発する以上はJSP中にロジックを埋め込む事はお勧めしませんが)
#ScheduleMain自体に@Transientなワーク変数で「リンクか否か」のフラグを持たせる等すれば分離しやすくなりますね。
返答が遅れ大変申し訳ありません。
アドバイスありがとうございます。
scheduleitems自体はrequest持ってますしpublicに設定してあります。
タグによる呼び出し<c:~等で呼び出しが出来るのですがattribute自体にセットできないので苦労していました。
>>とは言え、どれほど軽微であるにせよ、SAStrutsのMVCで開発する以上はJSP中にロジックを埋め込む事はお勧めしませんが
結局items[32]の配列にsqlで持ってきた情報をつめることによって解決させました。
やはりAction変数を詰め込めるだけ詰め込んで渡すのがスマートなのでしょうかね・・・
No.1
- 回答日時:
どこでも
request.setAttribute("Scheduleitems", Scheduleitemsクラスのインスタンス);
をしていませんが、それは記載していないだけでしょうか?
ただ、SAStrutsならsetAttribute、getAttributeで受け渡すこと自体が正しくない気がしますね。
http://sastruts.seasar.org/featureReference.html …
こちらは参考になりませんか?
返答が遅れ大変申し訳ありません。
アドバイスありがとうございます。
やはりELやタグを使うのが一般的のようですね。結局Actionに配列としてその月の情報を詰め込むことで解決しました。
出来ればJSPで作ったとおりに再現したかったので(この時点で横着なのかもしれませんが)残念です。
勉強になりました、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
式の型は配列型で int に解決済...
-
javaでcsvファイル読込時の改行...
-
全組み合わせの出力
-
javaのfor文
-
DataSet(DataTable)の使い方
-
javaのfor文
-
パソコンキーボードで時分秒を...
-
Javaで改行などが出来ないのです。
-
JSPやサーブレットでSystem.out...
-
C言語のポインターに関する警告
-
論理演算子”||”またはの入力方法
-
べき乗
-
<s:iterator>の値をリストで取...
-
格闘ゲームのコマンド判定について
-
テキストボックスに入力された...
-
Ctrl+Zが入力されると終了する...
-
どんな時にIteratorを使うと便...
-
ボタンのイベントで異なるウィ...
-
改行コードの置換が…
-
ArrayListからBean配列に値をセ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
Javaで電卓を作りたい
-
式の型は配列型で int に解決済...
-
javaでカレンダー作成
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
java spring でエラーが出て困...
-
6桁の数字を重複なしでランダム...
-
c# デリゲート関連の命名について
-
C++からC#のdllを参照する際、...
-
メインが含まれていません
-
(Swing)JTextFieldを半角のみ入...
-
DataSet(DataTable)の使い方
-
三目並べ(Tick-Tack-Toe)をJav...
-
JUnit4のアノテーションについて
-
初心者ですが、今javaで簡単な...
-
classを使って座標軸を求めるコ...
-
javaでcsvファイル読込時の改行...
-
C#で実行時にメソッドの返り値...
-
Java 初心者 int型の取り扱い方
おすすめ情報