xintra-mart J2EE ソースコードジェネレータチュートリアルガイド intra-martJ 2 E E ソ ー ス コ ー ド ジ ェ ネ レ ー タ チュートリアルガイド x intra-mart J2EE ソ ー ス コ ー ド ジ ェ ネ レ ー タ チ ュ ー ト リ ア ル ガ イ ド 0 1 1 J2EE ソ ー ス コ ー ド ジ ェ ネ レ ー タ チ ュ ー ト リ ア ル ガ イ ド の 目 的 と 内 容 1 1 作 成 手 順 ...................................................... 1 2 3 生成ソースプロセスフロー 3 2 プ ロ セ ス フ ロ ー ................................................ 3 3 5 作成アプリケーションの説明 5 3 ア プ リ ケ ー シ ョ ン 動 作 画 面 ...................................... 5 4 ア プ リ ケ ー シ ョ ン 動 作 説 明 ...................................... 6 4 7 DAO ジ ェ ネ レ ー タ に よ る 作 成 7 5 DAO シ ー ト の 構 成 .............................................. 7 6 DAO シ ー ト の 作 成 .............................................. 8 7 DAO ソ ー ス コ ー ド の 生 成 ....................................... 16 8 DAO ソ ー ス コ ー ド の 説 明 ....................................... 17 5 45 VIEW ジ ェ ネ レ ー タ に よ る 作 成 45 9 VIEW シ ー ト の 構 成 ............................................ 45 10 V I E W シ ー ト の 作 成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 6 11 V I E W ソ ー ス コ ー ド の 説 明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 8 6 93 コンパイル及び実行 93 12 プ ロ ジ ェ ク ト の 作 成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3 13 ソ ー ス の 実 行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 5 7 97 ソースコードの追加、変更 97 14 D A O 追 加 メ ソ ッ ド の 実 装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 8 15 マ ッ ピ ン グ ク ラ ス の 追 加 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 0 2 16 イ ベ ン ト フ レ ー ム ワ ー ク の 追 加 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 0 5 17 ア ク シ ョ ン 別 S e r v i c e C o n t r o l l e r の 追 加 . . . . . . . . . . . . . . . . . . . . . . . . 1 1 9 18 画 面 レ イ ア ウ ト の 変 更 ( J S P の 変 更 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 7 19 プ ロ パ テ ィ フ ァ イ ル の 変 更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 3 20 掲 示 板 ア プ リ ケ ー シ ョ ン の 実 行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 5 21 注 意 事 項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 6 8 138 付録 138 22 S o u r c e G e n e r a t o r タ グ ラ イ ブ ラ リ 機 能 . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 8 23 S o u r c e G e n e r a t o r 拡 張 ク ラ ス ラ イ ブ ラ リ 機 能 . . . . . . . . . . . . . . . . . . . . 1 6 8 1 1 J2EE ソースコードジェネレータチュートリアルガイドの目的と内容 J2EE ソースコードジェネレータチュートリアルガイドの目的と内容 当コース で は、複雑 な J2EE 開 発を容易 に 行うために intra-martJ2EE ソースコードジ ェネレー タ を利用し て J2EE ア プリケー シ ョンを作 成 する方法 に ついて学 習 します。 作成手順 ジェネレータシートの作成 DAO シート VIEW シート ソースコードの生成 IM-J2EE J2EE ソースコードジェネレータ ソースコード IM プ ロ パ テ ィ フ ァ イル ソースコードの追加 e Builder ( Framework Producer) ソースコードのコンパイル アプリケーションの実装・実行 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 1 2 2 2 生成ソースプロセスフロー 生成ソースプロセスフロー intra-martJ2EE ソースコードジ ェ ネレータは ViewGenerator、DAOGenerator の二つの生 成ツール で 構成され 、 それぞれの EXCEL シートから下 記 のソース コ ードを生 成 します。 ViewGenerator • 画面コントロールを持つ JSP ソース • ページからの入力リクエストを受ける ServiceController • 画面の入力情報の保持、チェックを行う ViewObject • サービスプロパティファイル DAOGenerator • データベースアクセスをサポートする DAO • DAO のインターフェースを定義した DAOIF • データベースの情報を取得、格納する ModelObject • データプロパティファイル クライアントサイド プ ロ セ ス サーバサイド フロー 画面情報の参照 ViewObject (Checker機能付き) JSP ⑧レスポンスの返信 マッピング ファイル ④値チェックエラー時 ブラウザ ②画面情報の格納 ⑥画面情報の参照 Event ③値チェック ⑤処理の呼び出し ①リクエストの受信 EventListener ServiceController 業務オブジェクト 処理の結果 データ格納 EventResult データ取得 ModelObject ServiceResult DAO (DAOIF) DBアクセス 画面遷移 Transition ServiceConfig properties ファイル EventConfig properties ファイル ①リクエストの受信 ブラウザからのリクエスト要求をServiceControllerが受け取る。 ⑤処理の呼び出し イベント等を利用して業務オブジェクトを呼び出す。 ②画面情報の格納 ServiceControllerはリクエストデータ(画面情報)をViewObject型でセッションに格納する。 ⑥画面情報の参照 各業務処理はマッピング情報をもとにViewObjectから画面情報を取得して処理を 行う。 ③値チェック ViewObjectのチェックメソッドを呼び出し、画面情報の入力チェックを行う。 ④値チェックエラー時 リクエスト元のJSPへ遷移する。 DataConfig properties ファイル ⑦DB処理要求 DAOはModelObjectよりデータを取得し、データベース処理を行う。 ⑧レスポンスの返信 JSPからはJSPタグよりViewObjectを参照して画面表示を行う。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 3 4 3 3 作成アプリケーションの説明 作成アプリケーションの説明 簡 単 な 掲 示 板 ア プ リ ケ ー シ ョ ン を 題 材 に し て J2 EE ソ ー ス コ ー ド ジ ェ ネ レ ー タ を 利 用し たアプリ ケ ーション を 作成して い きます。 掲示板ア プ リケーシ ョ ンの完成 し た画面は こ のように な ります。 アプリケーション動作画面 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 5 アプリケーション動作説明 記事の投稿(新規メッセージの登録) --------------------------------------画面上部 の 入力フォ ー ムに題名、本文、名前 等を入力 し 、「新規に 投稿」ボタ ンを押す と 、 画面下部 の 記事一覧 に 新しい記 事 として追 加 されます 。 新規投稿画面 新規投稿画面 入力フォーム 入力フォーム 新規投稿する 記事一覧 投稿記事への返信(返信メッセージの登録) --------------------------------投稿記事 の 下中央に あ る返信ボ タ ンを押す と 、画面が 返 信画面に 切 り替わり ま す。 新規投稿 画 面と返信 投 稿画面の 違 いは題名 が 入力でき な いこと、投 稿ボタン が 返信ボタン になるこ と 、記事一 覧 には返信 元 の記事だ け が表示さ れ ることが 異 なります 。 ここで「 返 信する」ボ タンを押 す と、返信 元 の記事の 中 に返信記 事 として記 事 が追加され ます。 新規投稿画面 返信投稿画面 入力フォーム 入力フォーム 返信元記事 返信する 返信元記事 返信記事 投稿記事の削除(メッセージの削除) --------------------------------------投稿記事 の 下中央に あ る削除ボ タ ンを押す と 、新規投稿 記事とそ れ に対する 返 信記事がす べて削除 さ れます。 6 4 4 DAO ジェネレータによる作成 DAO ジェネレータによる作成 DAO ジェネレータは、データベ ー スの項目、検索条件 な どの情報 を 記述した Excel シート を読み込 み 、DAO、DAOIF、ModelObject のコードを自動 生 成します 。 DAO シ ー ト の 構 成 (1) 更新履歴シート Excel ファイルの更 新 履歴を入 力 します。 作成される java ファイルには反 映 されませ ん (2) ファイル出力先定義シート 生成ファ イ ルの出力 先 を入力し ま す。 このシー ト の必須項 目 は必ず入 力 してくだ さ い。 (3) DAO/Model 定義シート ModelObject、DAO、DAOIF ファイル を作成す る 際に、基 本 になるシ ー トです。 このシー ト の必須項 目 は必ず入 力 してくだ さ い。 (4) ModelObject 追加プロパティシート ModelObject に新たな プロパテ ィ を追加し た い際に、 入 力します 。 (5) DAO/DAOIF 追加メソッド定義シート DAO ファイルにメソ ッ ドを追加 し たい際に 、 入力しま す 。 1 セットの ModelObject、DAO、DAOIF ファイルを作成するには、「DAO/Model 定義」、「ModelObject 追加プロパティ」、「DAO/DAOIF 追加メソッド定義」シートの 3 シートが必要です。 追加プロパティ、追加メソッドが無い場合も空白のシートを用意してください。 複数セットの ModelObject、DAO、DAOIF ファイルを作成するには、3 シート×複数セットが必要 です。この場合、項目【ModelObject,DAO,DAOIF 名(*)】の入力が一致するシートが関連付けられ ます。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 7 DAO シ ー ト の 作 成 ファイル出力先定義シート ----------------------------------------------「ファイ ル 出力定義 」部分には 生 成ソース フ ァイルの 出 力パスを 入 力します 。このフォル ダが無い 場 合は新た に フォルダ が 作成され ま す。 「DAO 定義」部分には データフ レ ームワー ク のプロパ テ ィファイ ル を生成す る ための情報 を入力し ま す。 A ○ B ○ D ○ C ○ G ○ E ○ 8 F ○ H ○ I ○ 4 DAO ジェネレータによる作成 A ModelObject、DAO、DAOIF ファイル出力先 ○ ファイ ル を出力す る フォルダ を 指定しま す 。 フォルダ が無い場 合 は作成さ れ ます。 B ○ DataConfig_XXX.properties ファイル出力先 ファ イ ルを出力 す るフォル ダ を指定し ま す。 フォルダ が 無い場合 は 作成され ま す。 C ソースファイルの上書き/追記 ○ 生成す る DataConfig_XXX.properties ファイルを上 書 きするか 追 記するか を 指定しま す。 一 つ の ア プ リ ケ ー シ ョ ン の DAO シー ト を 複 数 の ブ ッ ク に わ け て 作 成 し た と き な ど 追 記 に設定し ま す。 D アプリケーションID ○ アプリケ ー ションI D を指定し ま す。 DataConfig_XXX.properties のXXX部分な ど になりま す 。 E DAO キー ○ DAO を生成するとき の キーにな り ます。 F DAOクラス ○ DAOク ラ スを指定 し ます。 G ○ 自動取得 「DAO/Model 定義シートから 」 DAOク ラ スを自動 的 に取得し ま す。 H DAOコネクタ ○ DAOコ ネ クタを指 定 します。 I コメント ○ DataConfig_XXX.properties ファイルに出力 さ れるコメ ン トを入力 し ます。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 9 DAO/Model 定義シート ---------------------------------------------------DAO、ModelObject の基本情報や ModelObject が持つプ ロ パティを 設 定します 。 掲示板ア プ リケーシ ョ ンは下記 の テーブル 一 つで動作 し 、アクセ ス 方法も単 純 なため、テ ーブル構 成 と ModelObject の構成が一致し ま す。 BBMESSAGE テ ー ブ ル 列名 内容 MESSAGEID メ ッ セ ー ジ ID PARENTID 親 メ ッ セ ー ジ ID MESSAGESUBJECT メッセージ 題名 MESSAGEDATE メッセージ 発信日時 MESSAGEBODY メッセージ 本文 MESSAGEFLAG メッセージ フラグ USERNAME 発信者 USERPASSWORD USEREMAIL 属性 データ型 サイズ 主キー NUMBER 型 10 NUMBER 型 10 VARCHAR2 型 255 DATE 型 VARCHAR2 型 1500 CHAR 型 1 名前 VARCHAR2 型 255 発信者 パスワード VARCHAR2 型 255 発信者 e-mail VARCHAR2 型 255 USERHPNAME 発信者 ホームページ名 VARCHAR2 型 255 USERHPURL 発信者 ホ ー ム ペ ー ジ URL VARCHAR2 型 255 USERAGE 発信者 年齢 NUMBER 型 3 USERSEX 発信者 性別 CHAR 型 1 USERFEEL 発信者 気分 CHAR 型 1 A ○ B ○ C ○ D ○ E ○ F ○ 10 G ○ H ○ I ○ J ○ K ○ L ○ M ○ N ○ 4 DAO ジェネレータによる作成 A ModelObject、DAO、DAOIF 名 ○ こ の 名 称 の 後 に “ DAO” 、 “ DAOIF” が 付 加 さ れ て ク ラ ス 名 、 Java フ ァ イ ル 名 に な り ます。 シートの 種類が違 い 、この名 称 が同じシ ー トが同じ グ ループと し て処理さ れ ます。 B ○ テーブル名 アク セ スするテ ー ブル名を 記 述します 。 ここでは BBMESSAGE です。 C パッケージ名 ○ パッケ ー ジ名を指 定 します。 D モデルオブジェクトのクラスに対するコメント ○ モデ ル オブジェ ク トのクラ ス に対する コ メントを 入 力します 。 E sql(テーブル結合条件) ○ テーブル 結 合条件を S QLで指 定 します。 二 つ 以 上 の テ ー ブ ル を 結 合 し た 結 合 表 に ア ク セ ス す る DAO を 生 成 す る 場 合 に 使 用 し ま す。 掲示板ア プ リケーシ ョ ンでは使 用 しません 。 F データ項目名 ○ データ項 目 は ModelObject のプロパティと な り、項目名 はプロパ テ ィ名やメ ソ ッド名と して使用 さ れます。 通 常はカラ ム 名を Java のネーミン グ に合わせ て 記述しま す 。 G ○ カラム名 カラ ム 名を入力 し ます。 掲示板ア プリケー シ ョンでは テ ーブルの 列 名をその ま ま記述し ま す。 H Oracle データ型 ○ Oracle データ型を指 定 します。 掲示板ア プ リケーシ ョ ンではテ ー ブルのデ ー タ型をそ の まま記述 し ます。 I byte 数 ○ テーブル 列 のサイズ を 指定しま す 。 掲示板ア プ リケーシ ョ ンではテ ー ブルのサ イ ズをその ま ま記述し ま す。 J 主キー ○ 主キーの 項 目には”○”を指定し ま す。 掲示板ア プ リケーシ ョ ンでは MESSAGEID が主キーなの で ○を指定 し ます。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 11 K ○ 検索条件 検索 条 件を指定 し ます。 データを 抽 出するメ ソ ッドで LIKE 条件によ って抽出 条 件を指定 す るときに 使 用します。 掲示板ア プ リケーシ ョ ンでは使 用 しません 。 L Order ○ By 項目 別 に整列時 の 昇順か降 順 を Asc、Desc で指定し ます。 掲示板ア プリケー シ ョンでは 使 用しませ ん 。 M Order ○ By の優先順位 Order By の優先順 位を指定 し ます。 抽出した データリ ス トの整列 順 を指定し ま す。 例えば発 信 者順、日付 順で抽出 す るのであ れ ば、発 信者 の列に 1、日付の列に 2 を記述 します。 掲示板ア プ リケーシ ョ ンでは使 用 しません 。 N 各項目に対するコメント ○ コメント を 入力しま す 。 12 4 DAO ジェネレータによる作成 ModelObject 追加プロパティシート ---------------------------------------ModelObject にデータ 項目以外 の プロパテ ィ を持たせ た い場合に 記 述します 。 ModelObject にはプロ パティと プ ロパティ に 対する setter/getter が追加さ れ ます。 掲 示 板 ア プ リ ケ ー シ ョ ン は 使 用 し ま せ ん が DAO ジ ェ ネ レ ー タ の 動 作 に 必 要 な の で 、 ModelObject、DAO、DAOIF 名のみ入 力します 。 A ○ B ○ C ○ D ○ A ModelObject、DAO、DAOIF 名 ○ DAO/Model 定義シートと同じ 名 称を記述 し ます。 B ○ プロパティ名 追加 し たいプロ パ ティ名を 記 述します 。 C Javaの型 ○ プロ パ ティのク ラ ス型を記 述 します。 java.lang 以外の型 はフルパ ス で記述し て 下さい。 D 各プロパティに対するコメント ○ プロ パ ティに対 す るコメン ト を入力し ま す。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 13 DAO/DAOIF 追加メソッド定義シート ---------------------------------------DAO にある標準メソ ッ ド以外の メ ソッドを 追 加する場 合 に使用し ま す。 掲示板ア プ リケーシ ョ ンでは、 必 要な 6 つの メソッド を 追加して い ます。 ただし、 生 成される ソ ースコー ド はメソッ ド の定義の み で実装は 行 われませ ん 。 実際のロ ジ ックは生 成 ソースに 手 作業で記 述 する必要 が あります 。 A ○ B ○ C ○ D ○ E ○ A ModelObject、DAO、DAOIF 名 ○ DAO/Model 定義シートと同じ 名 称を記述 し ます。 B ○ メソッド名 メソ ッ ド名を記 述 します。 C 返却値の型 ○ 返却 値 の型を記 述 します。 java.lang 以外はプ ルパスで 記 述します 。 D 引数リスト ○ 引数 リ ストを指 定 します。 プログラ ムと同様 に 、 型 変 数名, 型 変数名・ ・ ・(繰り返し ) 14 4 DAO ジェネレータによる作成 E 各メソッドに対するコメント ○ メソッド に 対するコ メ ントを入 力 します。 生成ソースコードにはこのように出力されます。 /** * E ○ コメン ト */ public ○ C 返 却値の型 ○ B メ ソッド名 (○ D 引数リス ト ) { } getChildMessages メソッ ドの 出力例 /** * 指定ルートメッセージの子メッセージのリストを取得します。<BR> * * @param rootMessageId Number 型 * @return List 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public List getChildMessages(Number rootMessageId) throws DataConnectException, DataAccessException, DataPropertyException { return null; } intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 15 DAO ソ ー ス コ ー ド の 生 成 (1) DAOGenerator を起動します。 (2) マクロを有効にするかどうか聞かれたら有効を選択します。 (3) ダイアログが表示されたら「実行ボタン」を押します。 デフォルトではマクロ終了時にソースコードを生成したフォルダをエクスプローラで開 きますが 、開きたく な い場合は 実 行ボタン を 押す前に「 マクロ終 了 時に出力 フ ォルダを開 く」チェ ッ クを外し て 下さい。 (4) 作成した DAO シートを選択して「開く」ボタンを押します。 (5) 終了メッセージが表示されたら「OK」ボタンを押して終了します。 正常に終了した場合は、出力先に指定したフォルダにソースコードが生成されています。 16 4 DAO ジェネレータによる作成 DAO ソ ー ス コ ー ド の 説 明 生成ファイルの出力先 --------------------------------------------------「ファイ ル 出力先定 義 」シート に 記述した「 ファイル 出 力先」フ ォ ルダにフ ァ イルが生成 されます 。 Java ソースコードは「ModelObject、DAO、DAOIF ファイル 出力先 」フ ォルダ配 下 にさらに パッケー ジ のフォル ダ 階層が作 成 され、次 の ファイル が 生成され ま す。 (1) ModelObject、DAO、DAOIF ソースコードの出力先 「 ModelObject、 DAO、 DAOIF フ ァ イ ル 出 力 先 」 + 「 パ ッ ケ ー ジ の フ ォ ル ダ 階 層 」 配 下 の 、 ”model/data/“+「ModelObject,DAO,DAOIF 名」+”DAO.java” ”model/data/”+ 「ModelObject,DAO,DAOIF 名」+”DAOIF.java” ”model/object/”+「ModelObject,DAO,DAOIF 名」+”ModelObject.java” 「DAO/Model 定義」シー トの「sql(テーブル 結 合条件)」を 使用して い る場合は 、DAO、DAOIF ファイル 名 に"Query"がつきます 。 シートが 複 数セット あ る場合は 、 セット数 分 のファイ ル が作成さ れ ます。 (2) DataConfig_XXX.properties ファイルの出力先 「DataConfig_XXX.properties ファイル出力 先 」フォル ダ 配下の、 “DataConfig_”+「アプ リケーシ ョ ン ID」+”.properties” 掲示板アプリケーションの DAO シートからはこのように出力されます。 「ModelObject、DAO、DAOIF ファイル出力先 」 → “c:\work\BBPage\src” 「DataConfig_XXX.properties ファイル出力 先 」 → “c:\work\BBPage\properties” 「ModelObject,DAO,DAOIF 名」 → “BBMessage” 「パッケ ー ジ名」 → “imsg.sample.BBPage” 「アプリ ケ ーション ID」 → “BBPage” [BBPage] ├ [properties] │ └ DataConfig_BBPage.properties └ [src] └ [imsg] └ [sample] └ [BBPage] └ [model] ├ [data] │ ├ BBMessageDAO.java │ └ BBMessageDAOIF.java └ [object] └ BBMessageModelObject.java intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 17 掲示板アプリケーションの生成ファイル ----------------------------------掲示板ア プ リケーシ ョ ンの DAO シートから 生 成された ソ ースファ イ ルが「ファ イル出力先 定義」シ ー トに記述 し た「ファ イ ル出力先 」 フォルダ に 生成され ま す。 Java ソースコードは「ModelObject、DAO、DAOIF ファイル 出力先 」フ ォルダ配 下 にさらに パッケー ジ のフォル ダ 階層が作 成 され、次 の ファイル が 生成され ま す。 (1)BBMessageDAO.java DB アクセスを行います。 登録の場合は、ModelObject よりオブジ ェ クトを受 け 取り、DB に処理を行 い ます。 データ取得の場合は、DB からデータを取得し、ModelObject にデータを渡 し ます。 (2)BBMessageDAOIF.java DAO に実装されてい る メソッド の インタフ ェ ースです 。 (3)BBMessageModelObject.java DB と同じ構造のオブジェクトです。 マッピン グ クラスで 変 換された 画 面情報、DB の情報を 格 納します 。 (4)DataConfig_BBPage.properties DAO クラス、DAO コネクターの設定ファイルです。 BBMessageModelObject データ格納 データ取得 BBMesssageDAO(DAOIF) DB 18 4 DAO ジェネレータによる作成 (1) BBMessageDAO.java javadoc より メソッドの概要 BBMessageModelObject create(java.lang.String messageId) 主 キ ー か ら BBMessageModelObject を 作 成 し ま す 。 投 稿 、 返信、削除時に呼ばれます。 java.util.List createList() 条 件 指 定 な し で ク エ リ ー を 実 行 し 、 List を 作 成 し ま す 。 メッセージの画面表示、返信の際に呼ばれます。 java.util.List createListByWhere(java.lang.String where) where 句 を 指 定 し て ク エ リ ー を 実 行 し 、 List を 作 成 し ま す。メッセージの画面表示、返信の際に呼ばれます。 java.util.Map createMap() 条 件 指 定 な し で ク エ リ ー を 実 行 し 、 Map を 作 成 し ま す 。 void delete(BBMessageModelObject modelObject) BBMessageModelObject を 引 数 に も ら っ て delete 処 理 を 行います。 void deleteByWhere(java.lang.String where) where 文 を も ら っ て delete 処 理 を 行 い ま す 。 double entry(BBMessageModelObject modelObj) ID を 自 動 生 成 し 、 新 規 メ ッ セ ー ジ を 登 録 し ま す 。 投 稿 、 返信の際に呼ばれます。 void eraseMessage(java.lang.Number messageId) 指 定 ID を 持 つ メ ッ セ ー ジ を 削 除 (フ ラ グ セ ッ ト )し ま す 。 削除の際に呼ばれます。 java.util.List getChildMessages(java.lang.Number root MessageId) 指定ルートメッセージの子メッセージのリストを取得し ます。メッセージの画面表示の際に呼ばれます。 int getCountByWhere(java.lang.String where) 指定条件よりレコード件数を取得します。 double getMaxMessageId() 現 在 登 録 さ れ て い る メ ッ セ ー ジ の う ち 最 大 の MessageID を 返 し ま す 。 投 稿 、 返 信 の 際 に 、 MessageID が 重 複 し な い 様 、 最 大 の MessageID を 取 得 し ま す 。 java.util.List getRootMessages() ルートメッセージのリストを取得します。返信の際に呼 ばれます。 java.util.List getRootMessages(java.lang.Number messageId) 指 定 I D を 持 つ ル ー ト メ ッ セ ー ジ リ ス ト を 取 得 し ま す 。返 信の際に呼ばれます。 void insert(BBMessageModelObject modelObject) BBMessageModelObject を 引 数 に も ら っ て Insert 処 理 を 行います。投稿、返信の際に呼ばれます。 java.lang.String sqlString(java.lang.Object input, java.lang.String quote) 対象オブジェクトを文字列として評価し、改行を取り除 き 、ク オ ー テ ー シ ョ ン が 適 切 に 行 わ れ た 文 字 列 を 返 し ま す 。投 稿 、 返 信 、 削 除 時 な ど 、 sql 文 が 使 用 さ れ る 際 に 呼 ば れ ま す 。 void update(BBMessageModelObject modelObject) BBMessageModelObject を 引 数 に も ら っ て Update 処 理 を 行います。削除時に削除フラグをセットする際に呼ばれます。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 19 /* * BBMessageDAO.java * * Created on 2003/08/16, 13:52 */ package imsg.sample.BBPage.model.data; import java.io.Serializable; import java.util.*; import jp.co.intra_mart.framework.tools.sourcegenerator.util.StringCompilation; import java.text.SimpleDateFormat; import java.math.BigDecimal; import java.sql.SQLException; import jp.co.intra_mart.foundation.database.DbsConnection; import jp.co.intra_mart.framework.base.data.IntramartDBDAO; import jp.co.intra_mart.framework.base.data.DataAccessException; import jp.co.intra_mart.framework.base.data.DataConnectException; import jp.co.intra_mart.framework.base.data.DataPropertyException; import jp.co.intra_mart.framework.system.exception.SystemException; import jp.co.intra_mart.framework.tools.sourcegenerator.model.ItemCodeDuplicationException; import jp.co.intra_mart.framework.tools.sourcegenerator.model.ItemNotExistException; import imsg.sample.BBPage.model.object.BBMessageModelObject; /** * Intramart の DB 接続情報を利用した、BBMESSAGE テーブル操作用の DAO です。<BR><BR> * * @since 2003/8/16 */ public class BBMessageDAO extends IntramartDBDAO implements BBMessageDAOIF{ /** * 主キーから BBMessageModelObject を作成します。<BR><BR> * * @param messageId BBMESSAGE テーブルの主キー MESSAGEID * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 * @return BBMessageModelObject のインスタンス */ public BBMessageModelObject create(String messageId) throws DataConnectException, DataAccessException, DataPropertyException { //各変数の初期化 DbsConnection conn = null; String sql = ""; List list = null; Hashtable hash = null; //DbsConnection の取得 conn = getConnection(); //sql の作成 sql = "SELECT * FROM BBMESSAGE WHERE \"MESSAGEID\" = " + sqlString(messageId,""); //select 処理 try{ long before = System.currentTimeMillis(); 20 4 DAO ジェネレータによる作成 list = conn.select(sql); double time = ((double)(System.currentTimeMillis() - before))/1000.0; }catch(Exception ex){ throw new DataAccessException(ex.getMessage(),ex); } //DB から取得できたかをチェック //取得できなかったときは null を返す try{ hash = (Hashtable)list.get(0); }catch(IndexOutOfBoundsException ex){ return null; } return create(hash); P26 参照 } /** * 条件指定なしでクエリーを実行し、List を作成します。<BR> * 検索結果が無いときは要素 0 の List を返します。<BR><BR> * * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 * @return BBMessageModelObject の List */ public List createList() throws DataConnectException, DataAccessException, DataPropertyException { //sql の作成 String sql = "SELECT * FROM BBMESSAGE"; return createList(sql); P28 参照 } /** * where 句を指定してクエリーを実行し、List を作成します。<BR> * 条件は引数で与える String の中に格納しておきます。<BR> * 検索結果が無いときは要素 0 の List を返します。<BR><BR> * 検索の仕方は BBPageDAOSheet.xls の DAO・Model 定義に記述されています。<BR><BR> * * @param where 検索条件。SQL の where 句に指定する文字列(先頭に'where'は不要)。 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 * @return BBMessageModelObject の List */ public List createListByWhere(String where) throws DataConnectException, DataAccessException, DataPropertyException { //sql の作成 String sql = "SELECT * FROM BBMESSAGE"; if (!(where == null || where.equals(""))){ sql = sql + " WHERE " + where; } return createList(sql); P28 参照 } /** * 条件指定なしでクエリーを実行し、Map を作成します。<BR> * 検索結果が無いときは要素 0 の Map を返します。<BR><BR> intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 21 * * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 * @return BBMessageModelObject の Map */ public Map createMap() throws DataConnectException, DataAccessException, DataPropertyException { //sql の作成 String sql = "SELECT * FROM BBMESSAGE"; return createMap(sql,null); P29 参照 } /** * BBMessageModelObject を引数にもらって delete 処理を行います。<BR><BR> * * @param modelObject Delete したい BBMessageModelObject * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public void delete(BBMessageModelObject modelObject) throws DataConnectException, DataAccessException, DataPropertyException { delete(modelObject.getKey()); P22 参照 } /** * BBMessageModelObject のキーを引数にもらって delete 処理を行います。<BR><BR> * * @param key Delete したい BBMessageModelObject のキー * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public void delete(Object key) throws DataConnectException, DataAccessException, DataPropertyException { //DbsConnection の取得 DbsConnection conn = getConnection(); //sql String sql = "delete BBMESSAGE "; //Where 句の作成 StringTokenizer st = new StringTokenizer(key.toString() , BBMessageModelObject.DELIMITER); String where = " WHERE "; where += "\"MESSAGEID\" = " + sqlString(st.nextToken(),""); sql += where; //削除処理 try{ long before = System.currentTimeMillis(); conn.execute(sql); double time = ((double)(System.currentTimeMillis() - before))/1000.0; }catch(Exception ex){ throw new DataAccessException(ex.getMessage(),ex); } } 22 4 DAO ジェネレータによる作成 /** * where 文をもらって delete 処理を行います。<BR><BR> * * @param where 削除条件 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public void deleteByWhere(String where) throws DataConnectException, DataAccessException, DataPropertyException { String sql = "delete BBMESSAGE "; if(!where.equals("")){ //sql 文作成 sql += " where " + where; DbsConnection conn = getConnection(); try{ long before = System.currentTimeMillis(); conn.execute(sql); double time = ((double)(System.currentTimeMillis() - before))/1000.0; }catch(Exception ex){ throw new DataAccessException(ex.getMessage(),ex); } } } /** * BBMessageModelObject を引数にもらって Insert 処理を行います。<BR><BR> * * @param modelObject Insert したい BBMessageModelObject * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public void insert(BBMessageModelObject modelObject) throws DataConnectException, DataAccessException, DataPropertyException { //登録しようとしている商品コードが既に存在するかチェック BBMessageModelObject obj = null; try{ obj = create(modelObject.getMessageId().toString()); }catch(Exception ex){ throw new DataAccessException(ex.getMessage(),ex); } //登録しようとしている商品コードが既に登録されていた場合の処理 if(obj != null){ ItemCodeDuplicationException e = new ItemCodeDuplicationException(); //重複していたコードを格納 e.setCode(modelObject.getKey().toString()); throw e; } SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss"); String sql = "insert into "; sql += "BBMESSAGE ("; sql += intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 23 "\"MESSAGEID\","+ "\"PARENTID\","+ "\"MESSAGESUBJECT\","+ "\"MESSAGEDATE\","+ "\"MESSAGEBODY\","+ "\"MESSAGEFLAG\","+ "\"USERNAME\","+ "\"USERPASSWORD\","+ "\"USEREMAIL\","+ "\"USERHPNAME\","+ "\"USERHPURL\","+ "\"USERAGE\","+ "\"USERSEX\","+ "\"USERFEEL\") "; sql += "values ("; sql += sqlString( modelObject.getMessageId() ,"" ) + "," + sqlString( modelObject.getParentId() ,"" ) + "," + sqlString( modelObject.getMessageSubject() , "'" ) + "," + "to_date('"+ format.format(modelObject.getMessageDate())+"','yyyy/MM/dd hh24:mi:ss')" + "," + sqlString( modelObject.getMessageBody() , "'" ) + "," + sqlString( modelObject.getMessageFlag() , "'" ) + "," + sqlString( modelObject.getUserName() , "'" ) + "," + sqlString( modelObject.getUserPassword() , "'" ) + "," + sqlString( modelObject.getUserEmail() , "'" ) + "," + sqlString( modelObject.getUserHpName() , "'" ) + "," + sqlString( modelObject.getUserHpUrl() , "'" ) + "," + sqlString( modelObject.getUserAge() ,"" ) + "," + sqlString( modelObject.getUserSex() , "'" ) + "," + sqlString( modelObject.getUserFeel() , "'" )+")"; DbsConnection conn = getConnection(); //insert 処理 try{ long before = System.currentTimeMillis(); conn.execute(sql); double time = ((double)(System.currentTimeMillis() - before))/1000.0; }catch(Exception ex){ throw new DataAccessException(ex.getMessage(),ex); } } /** * BBMessageModelObject を引数にもらって Update 処理を行います。<BR><BR> * * @param modelObject Update したい BBMessageModelObject * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public void update(BBMessageModelObject modelObject) throws DataConnectException, DataAccessException, DataPropertyException { //登録しようとしている商品コードが既に存在するかチェック BBMessageModelObject obj = null; try{ obj = create(modelObject.getMessageId().toString()); 24 4 DAO ジェネレータによる作成 }catch(Exception ex){ throw new DataAccessException(ex.getMessage(),ex); } //更新しようとしているデータが削除されているとき if(obj == null){ ItemNotExistException e = new ItemNotExistException(); //削除されていたコードを格納 e.setCode(modelObject.getKey().toString()); throw e; } SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss"); String sql = "update BBMESSAGE set "; String set = ""; if(modelObject.getMessageId() != null){ set +=" \"MESSAGEID\"="; set += sqlString( modelObject.getMessageId() ,""); set += " ,"; } if(modelObject.getParentId() != null){ set +=" \"PARENTID\"="; set += sqlString( modelObject.getParentId() ,""); set += " ,"; } if(modelObject.getMessageSubject() != null){ set +=" \"MESSAGESUBJECT\"="; set += sqlString( modelObject.getMessageSubject() ,"'"); set += " ,"; } if(modelObject.getMessageDate() != null){ set +=" \"MESSAGEDATE\"="; set += "to_date('"+format.format(modelObject.getMessageDate())+"','yyyy/MM/dd hh24:mi:ss')"; set += " ,"; } if(modelObject.getMessageBody() != null){ set +=" \"MESSAGEBODY\"="; set += sqlString( modelObject.getMessageBody() ,"'"); set += " ,"; } if(modelObject.getMessageFlag() != null){ set +=" \"MESSAGEFLAG\"="; set += sqlString( modelObject.getMessageFlag() ,"'"); set += " ,"; } if(modelObject.getUserName() != null){ set +=" \"USERNAME\"="; set += sqlString( modelObject.getUserName() ,"'"); set += " ,"; } if(modelObject.getUserPassword() != null){ set +=" \"USERPASSWORD\"="; set += sqlString( modelObject.getUserPassword() ,"'"); set += " ,"; } if(modelObject.getUserEmail() != null){ set +=" \"USEREMAIL\"="; set += sqlString( modelObject.getUserEmail() ,"'"); set += " ,"; intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 25 } if(modelObject.getUserHpName() != null){ set +=" \"USERHPNAME\"="; set += sqlString( modelObject.getUserHpName() ,"'"); set += " ,"; } if(modelObject.getUserHpUrl() != null){ set +=" \"USERHPURL\"="; set += sqlString( modelObject.getUserHpUrl() ,"'"); set += " ,"; } if(modelObject.getUserAge() != null){ set +=" \"USERAGE\"="; set += sqlString( modelObject.getUserAge() ,""); set += " ,"; } if(modelObject.getUserSex() != null){ set +=" \"USERSEX\"="; set += sqlString( modelObject.getUserSex() ,"'"); set += " ,"; } if(modelObject.getUserFeel() != null){ set +=" \"USERFEEL\"="; set += sqlString( modelObject.getUserFeel() ,"'"); } if(set.equals("")){ return; }else{ if(set.substring(set.length()-1).equals(",")){ set = set.substring(0,set.length()-1); } //Where 句の作成 StringTokenizer st = new StringTokenizer(modelObject.getKey().toString() , BBMessageModelObject.DELIMITER); String where = ""; where += "\"MESSAGEID\" = " + sqlString(st.nextToken(),""); sql += set + " WHERE " + where; //DbsConnection の取得 DbsConnection conn = getConnection(); //update 処理 try{ long before = System.currentTimeMillis(); conn.execute(sql); double time = ((double)(System.currentTimeMillis() - before))/1000.0; }catch(Exception ex){ throw new DataAccessException(ex.getMessage(),ex); } } } /** * Hashtable からモデルオブジェクトを作成します。<BR><BR> * * @param hash DB への問い合わせ結果 * @return 作ったモデルオブジェクト */ private BBMessageModelObject create(Hashtable hash){ 26 4 DAO ジェネレータによる作成 BBMessageModelObject modelObject = new BBMessageModelObject(); if(hash.containsKey("messageid")){ modelObject.setMessageId(String.valueOf(((Double)hash.get("messageid")).longValue())); } else{ modelObject.setMessageId((BigDecimal)null); } if(hash.containsKey("parentid")){ modelObject.setParentId(String.valueOf(((Double)hash.get("parentid")).longValue())); } else{ modelObject.setParentId((BigDecimal)null); } if(hash.containsKey("messagesubject")){ modelObject.setMessageSubject((String)hash.get("messagesubject")); } else{ modelObject.setMessageSubject(null); } if(hash.containsKey("messagedate")){ modelObject.setMessageDate((Date)hash.get("messagedate")); } else{ modelObject.setMessageDate((Date)null); } if(hash.containsKey("messagebody")){ modelObject.setMessageBody((String)hash.get("messagebody")); } else{ modelObject.setMessageBody(null); } if(hash.containsKey("messageflag")){ modelObject.setMessageFlag((String)hash.get("messageflag")); } else{ modelObject.setMessageFlag(null); } if(hash.containsKey("username")){ modelObject.setUserName((String)hash.get("username")); } else{ modelObject.setUserName(null); } if(hash.containsKey("userpassword")){ modelObject.setUserPassword((String)hash.get("userpassword")); } else{ modelObject.setUserPassword(null); } if(hash.containsKey("useremail")){ intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 27 modelObject.setUserEmail((String)hash.get("useremail")); } else{ modelObject.setUserEmail(null); } if(hash.containsKey("userhpname")){ modelObject.setUserHpName((String)hash.get("userhpname")); } else{ modelObject.setUserHpName(null); } if(hash.containsKey("userhpurl")){ modelObject.setUserHpUrl((String)hash.get("userhpurl")); } else{ modelObject.setUserHpUrl(null); } if(hash.containsKey("userage")){ modelObject.setUserAge(String.valueOf(((Double)hash.get("userage")).longValue())); } else{ modelObject.setUserAge((BigDecimal)null); } if(hash.containsKey("usersex")){ modelObject.setUserSex((String)hash.get("usersex")); } else{ modelObject.setUserSex(null); } if(hash.containsKey("userfeel")){ modelObject.setUserFeel((String)hash.get("userfeel")); } else{ modelObject.setUserFeel(null); } return modelObject; } /** * 与えられた SQL でクエリーをかけ BBMessageModelObject の List を作成します。<BR><BR> * * @param sql * @throws DataConnectException データ接続に関連する例外が発生 SQL * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 * @return BBMessageModelObject の List */ private List createList(String sql) throws DataConnectException, DataAccessException, DataPropertyException{ //各変数の初期化 DbsConnection conn = null; List list = null; List resultList = null; 28 4 DAO ジェネレータによる作成 Hashtable hash = null; //DbsConnection の取得 conn = getConnection(); try{ long before = System.currentTimeMillis(); list = conn.select(sql); double time = ((double)(System.currentTimeMillis() - before))/1000.0; }catch(Exception ex){ throw new DataAccessException(ex.getMessage(),ex); } int size = list.size(); resultList = new ArrayList(size); for(int i=0;i < size;i++){ BBMessageModelObject modelObject = create((Hashtable)list.get(i)); resultList.add(modelObject); } return resultList; } /** * 与えられた SQL でクエリーをかけ BBMessageModelObject の Map を作成します。<BR><BR> * * @param sql * @param keyList [out]検索結果の順番を保存するため BBMessageModelObject のキーを保存。null の時は使 SQL わない * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 * @return BBMessageModelObject の Map */ private Map createMap(String sql,List keyList) throws DataConnectException, DataAccessException, DataPropertyException{ //各変数の初期化 DbsConnection conn = null; List list = null; Map resultMap = null; Hashtable hash = null; if(keyList != null) keyList.clear(); //DbsConnection の取得 conn = getConnection(); try{ long before = System.currentTimeMillis(); list = conn.select(sql); double time = ((double)(System.currentTimeMillis() - before))/1000.0; }catch(Exception ex){ throw new DataAccessException(ex.getMessage(),ex); } int size = list.size(); resultMap = new HashMap(size); for(int i=0;i < size;i++){ BBMessageModelObject modelObject = create((Hashtable)list.get(i)); if(keyList != null) keyList.add(modelObject.getKey()); resultMap.put(modelObject.getKey(),modelObject); intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 29 } return resultMap; } /** * 指定条件よりレコード件数を取得します。<BR> * 条件パラメータは「where」文字を入れないようにセットします。<BR><BR> * * @param where 検索条件(「where」入れない) * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 * @return 件数 */ public int getCountByWhere(String where) throws DataConnectException, DataAccessException, DataPropertyException { //変数初期化 int count = 0; DbsConnection conn = null; //DbsConnection の取得 conn = getConnection(); //件数取得 try{ count = conn.getCount("BBMESSAGE", where); }catch(SQLException e){ throw new DataAccessException(e.getMessage(),e); } return count; } /** * 対象オブジェクトを文字列として評価し、改行を取り除き、クオーテーションが適切に行われた文字列を 返します。<BR><BR> * * @param input 対象オブジェクト * @param quote クオーテーション指定 * @return SQL 用文字列(input が null でなければ、quote+文字列+quote の文字列) */ public String sqlString( Object input , String quote){ return ( input != null )? quote + StringCompilation.prepareSql(""+input) + quote : "NULL"; } /** * ルートメッセージのリストを取得します。<BR> * * @return List 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public List getRootMessages() throws DataConnectException, DataAccessException, DataPropertyException { return null; } 30 4 DAO ジェネレータによる作成 /** * 指定 ID を持つルートメッセージリストを取得します。<BR> * * @param messageId Number 型 * @return List 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public List getRootMessages(Number messageId) throws DataConnectException, DataAccessException, DataPropertyException { return null; } /** * 指定ルートメッセージの子メッセージのリストを取得します。<BR> * * @param rootMessageId Number 型 * @return List 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public List getChildMessages(Number rootMessageId) throws DataConnectException, DataAccessException, DataPropertyException { return null; } /** * ID を自動生成し、新規メッセージを登録します。<BR> * * @param modelObj BBMessageModelObject 型 * @return double 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public double entry(BBMessageModelObject modelObj) throws DataConnectException, DataAccessException, DataPropertyException { return 0; } /** * 現在登録されているメッセージのうち最大の MessageID を返します。<BR> * * @return double 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public double getMaxMessageId() throws DataConnectException, DataAccessException, DataPropertyException { return 0; } intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 31 /** * 指定 ID を持つメッセージを削除(フラグセット)します。<BR> * * @param messageId Number 型 * @return void 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public void eraseMessage(Number messageId) throws DataConnectException, DataAccessException, DataPropertyException { } } 32 4 DAO ジェネレータによる作成 (2) BBMessageDAOIF.java 生成され る メソッドは DAO と同様です。 /* * BBMessageDAOIF.java * * Created on 2003/08/16, 13:52 */ package imsg.sample.BBPage.model.data; import java.sql.*; import java.util.*; import java.math.BigDecimal; import imsg.sample.BBPage.model.object.BBMessageModelObject; import jp.co.intra_mart.framework.base.data.DataAccessException; import jp.co.intra_mart.framework.base.data.DataConnectException; import jp.co.intra_mart.framework.base.data.DataPropertyException; /** * BBMESSAGE テーブル操作用 DAO のインターフェースです。<BR><BR> * * @author - * @since 2003/8/16 */ public interface BBMessageDAOIF{ /** * 主キーから BBMessageModelObject を作成します。<BR><BR> * * @param messageId BBMESSAGE テーブルの主キー MESSAGEID * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 * @return BBMessageModelObject のインスタンス */ public BBMessageModelObject create(String messageId) throws DataConnectException, DataAccessException, DataPropertyException; /** * 条件指定なしでクエリーを実行し、List を作成します。<BR> * 検索結果が無いときは要素 0 の List を返します。<BR><BR> * * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 * @return BBMessageModelObject の List */ public List createList() throws DataConnectException, DataAccessException, DataPropertyException; /** * where 句を指定してクエリーを実行し、List を作成します。<BR> * 条件は引数で与える String の中に格納しておきます。<BR> * 検索結果が無いときは要素 0 の List を返します。<BR><BR> * 検索の仕方は BBPageDAOSheet.xls の DAO・Model 定義に記述されています。<BR><BR> * * @param where 検索条件。SQL の where 句に指定する文字列(先頭に'where'は不要)。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 33 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 * @return BBMessageModelObject の List */ public List createListByWhere(String where) throws DataConnectException, DataAccessException, DataPropertyException; /** * 条件指定なしでクエリーを実行し、Map を作成します。<BR> * 検索結果が無いときは要素 0 の Map を返します。<BR><BR> * * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 * @return BBMessageModelObject の Map */ public Map createMap() throws DataConnectException, DataAccessException, DataPropertyException; /** * BBMessageModelObject を引数にもらって delete 処理を行います。<BR><BR> * * @param modelObject Delete したい BBMessageModelObject * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public void delete(BBMessageModelObject modelObject) throws DataConnectException, DataAccessException, DataPropertyException; /** * BBMessageModelObject のキーを引数にもらって delete 処理を行います。<BR><BR> * * @param key Delete したい BBMessageModelObject のキー * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public void delete(Object key) throws DataConnectException, DataAccessException, DataPropertyException; /** * where 文をもらって delete 処理を行います。<BR><BR> * * @param where 削除条件 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public void deleteByWhere(String where) throws DataConnectException, DataAccessException, DataPropertyException; /** * BBMessageModelObject を引数にもらって Insert 処理を行います。<BR><BR> * 34 * @param modelObject Insert したい BBMessageModelObject * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 4 DAO ジェネレータによる作成 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public void insert(BBMessageModelObject modelObject) throws DataConnectException, DataAccessException, DataPropertyException; /** * BBMessageModelObject を引数にもらって Update 処理を行います。<BR><BR> * * @param modelObject Update したい BBMessageModelObject * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public void update(BBMessageModelObject modelObject) throws DataConnectException, DataAccessException, DataPropertyException; /** * 指定条件よりレコード件数を取得します。<BR> * 条件パラメータは「where」文字を入れないようにセットします。<BR><BR> * * @param where 検索条件(「where」入れない) * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 * @return 件数 */ public int getCountByWhere(String where) throws DataConnectException, DataAccessException, DataPropertyException; /** * ルートメッセージのリストを取得します。<BR> * * @return List 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public List getRootMessages() throws DataConnectException, DataAccessException, DataPropertyException; /** * 指定 ID を持つルートメッセージリストを取得します。<BR> * * @param messageId Number 型 * @return List 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public List getRootMessages(Number messageId) throws DataConnectException, DataAccessException, DataPropertyException; /** * 指定ルートメッセージの子メッセージのリストを取得します。<BR> * * @param rootMessageId Number 型 * @return List 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 35 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public List getChildMessages(Number rootMessageId) throws DataConnectException, DataAccessException, DataPropertyException; /** * ID を自動生成し、新規メッセージを登録します。<BR> * * @param modelObj BBMessageModelObject 型 * @return double 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public double entry(BBMessageModelObject modelObj) throws DataConnectException, DataAccessException, DataPropertyException; /** * 現在登録されているメッセージのうち最大の MessageID を返します。<BR> * * @return double 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public double getMaxMessageId() throws DataConnectException, DataAccessException, DataPropertyException; /** * 指定 ID を持つメッセージを削除(フラグセット)します。<BR> * * @param messageId Number 型 * @return void 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public void eraseMessage(Number messageId) throws DataConnectException, DataAccessException, DataPropertyException; } 36 4 DAO ジェネレータによる作成 (3) BBMessageModelObject.java javadoc より メソッドの概要 ModelObject createInstance() BBMessageModelObject の イ ン ス タ ン ス を 返 し ま す 。 java.lang.Object getKey() B e a n を マ ッ ピ ン グ す る と き に 使 う キ ー を 返 し ま す 。登 録 、 返信、削除の際に呼ばれます。 java.lang.String getMessageBody() MESSAGEBODY を 取 得 し ま す 。 java.util.Date getMessageDate() MESSAGEDATE を 取 得 し ま す 。 java.lang.String getMessageFlag() MESSAGEFLAG を 取 得 し ま す 。 java.math.BigDecimal getMessageId() MESSAGEID を 取 得 し ま す 。 java.lang.String getMessageSubject() MESSAGESUBJECT を 取 得 し ま す 。 java.math.BigDecimal getParentId() PARENTID を 取 得 し ま す 。 java.math.BigDecimal getUserAge() USERAGE を 取 得 し ま す 。 java.lang.String getUserEmail() USEREMAIL を 取 得 し ま す 。 java.lang.String getUserFeel() USERFEEL を 取 得 し ま す 。 java.lang.String getUserHpName() USERHPNAME を 取 得 し ま す 。 java.lang.String getUserHpUrl() USERHPURL を 取 得 し ま す 。 java.lang.String getUserName() USERNAME を 取 得 し ま す 。 java.lang.String getUserPassword() USERPASSWORD を 取 得 し ま す 。 java.lang.String getUserSex() USERSEX を 取 得 し ま す 。 void setFieldMap() BBMessageModelObject の 対 象 テ ー ブ ル の カ ラ ム マ ッ プ に オブジェクトメンバーをセットします。 void setMessageBody(java.lang.String messageBody) MESSAGEBODY を セ ッ ト し ま す 。 void setMessageDate(java.util.Date messageDate) MESSAGEDATE を セ ッ ト し ま す 。 void setMessageFlag(java.lang.String messageFlag) MESSAGEFLAG を セ ッ ト し ま す 。 void setMessageId(java.math.BigDecimal messageId) MESSAGEID を セ ッ ト し ま す 。 void setMessageId(java.lang.String messageId) MESSAGEID を セ ッ ト し ま す 。 void setMessageSubject(java.lang.String messageSubject) MESSAGESUBJECT を セ ッ ト し ま す 。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 37 void setModelName() BBMessageModelObject の モ デ ル オ ブ ジ ェ ク ト 名 を セ ッ ト します。 void setParentId(java.math.BigDecimal parentId) PARENTID を セ ッ ト し ま す 。 void setParentId(java.lang.String parentId) PARENTID を セ ッ ト し ま す 。 void setPkMap() BBMessageModelObject Map に セ ッ ト し ま す 。 の 対 象 テ ー ブ ル の 主 キ ー 情 報 を void setTableName() BBMessageModelObject す。 の 対 象 テ ー ブ ル 名 を セ ッ ト し ま void setUserAge(java.math.BigDecimal userAge) USERAGE を セ ッ ト し ま す 。 void setUserAge(java.lang.String userAge) USERAGE を セ ッ ト し ま す 。 void setUserEmail(java.lang.String userEmail) USEREMAIL を セ ッ ト し ま す 。 void setUserFeel(java.lang.String userFeel) USERFEEL を セ ッ ト し ま す 。 void setUserHpName(java.lang.String userHpName) USERHPNAME を セ ッ ト し ま す 。 void setUserHpUrl(java.lang.String userHpUrl) USERHPURL を セ ッ ト し ま す 。 void setUserName(java.lang.String userName) USERNAME を セ ッ ト し ま す 。 void setUserPassword(java.lang.String userPassword) USERPASSWORD を セ ッ ト し ま す 。 void setUserSex(java.lang.String userSex) USERSEX を セ ッ ト し ま す 。 38 4 DAO ジェネレータによる作成 /* * BBMessageModelObject.java * * Created on 2003/08/15, 13:59 */ package imsg.sample.BBPage.model.object; import java.util.Date; import java.math.BigDecimal; import java.io.Serializable; import jp.co.intra_mart.framework.tools.sourcegenerator.model.ModelObject; import jp.co.intra_mart.framework.tools.sourcegenerator.model.ModelObjectIF; /** * 掲示板のサンプルアプリケーションです。<BR><BR> * * @author - * @since 2003/8/15 */ public class BBMessageModelObject extends ModelObject implements Serializable,ModelObjectIF{ /** 複合キーを連結するための DELIMITER です。 */ public static final String DELIMITER = "|"; フィールドを取得するメソッド //messageId SourceGenerator パ ッ ケ ー ジ の ModelObject /** ク ラ ス の getField メ ソ ッ ド * MESSAGEID の Getter です。<BR><BR> * @return このインスタンスの MESSAGEID */ public BigDecimal getMessageId(){ return (BigDecimal)getField("MESSAGEID"); } /** * MESSAGEID の Setter です。<BR><BR> * @param messageId このインスタンスの MESSAGEID にセットしたい値 */ public void setMessageId(BigDecimal messageId){ fieldMap.put(tableName+"."+"MESSAGEID",messageId); } フィールド 取得・設定 メソッド /** * MESSAGEID の Setter です。(文字列インタフェースを用意する)<BR><BR> * @param messageId このインスタンスの MESSAGEID にセットしたい値 */ public void setMessageId(String messageId){ fieldMap.put(tableName+"."+"MESSAGEID",getBigDecimalVal(messageId)); } //parentId /** * PARENTID の Getter です。<BR><BR> * @return このインスタンスの PARENTID */ public BigDecimal getParentId(){ return (BigDecimal)getField("PARENTID"); intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 39 } /** * PARENTID の Setter です。<BR><BR> * @param parentId このインスタンスの PARENTID にセットしたい値 */ public void setParentId(BigDecimal parentId){ fieldMap.put(tableName+"."+"PARENTID",parentId); } /** * PARENTID の Setter です。(文字列インタフェースを用意する)<BR><BR> * @param parentId このインスタンスの PARENTID にセットしたい値 */ public void setParentId(String parentId){ fieldMap.put(tableName+"."+"PARENTID",getBigDecimalVal(parentId)); } //messageSubject /** * MESSAGESUBJECT の Getter です。<BR><BR> * @return このインスタンスの MESSAGESUBJECT */ public String getMessageSubject(){ return (String)getField("MESSAGESUBJECT"); } /** フィールド * MESSAGESUBJECT の Setter です。<BR><BR> * @param messageSubject このインスタンスの MESSAGESUBJECT にセットしたい値 */ public void setMessageSubject(String messageSubject){ fieldMap.put(tableName+"."+"MESSAGESUBJECT",messageSubject); } //messageDate /** * MESSAGEDATE の Getter です。<BR><BR> * @return このインスタンスの MESSAGEDATE */ public Date getMessageDate(){ return (Date)getField("MESSAGEDATE"); } /** * MESSAGEDATE の Setter です。<BR><BR> * @param messageDate このインスタンスの MESSAGEDATE にセットしたい値 */ public void setMessageDate(Date messageDate){ fieldMap.put(tableName+"."+"MESSAGEDATE",messageDate); } //messageBody /** * MESSAGEBODY の Getter です。<BR><BR> * @return このインスタンスの MESSAGEBODY */ public String getMessageBody(){ return (String)getField("MESSAGEBODY"); } /** * 40 MESSAGEBODY の Setter です。<BR><BR> 取得・設定 メソッド 4 DAO ジェネレータによる作成 * @param messageBody このインスタンスの MESSAGEBODY にセットしたい値 */ public void setMessageBody(String messageBody){ fieldMap.put(tableName+"."+"MESSAGEBODY",messageBody); } //messageFlag /** * MESSAGEFLAG の Getter です。<BR><BR> * @return このインスタンスの MESSAGEFLAG */ public String getMessageFlag(){ return (String)getField("MESSAGEFLAG"); } /** * MESSAGEFLAG の Setter です。<BR><BR> * @param messageFlag このインスタンスの MESSAGEFLAG にセットしたい値 */ public void setMessageFlag(String messageFlag){ fieldMap.put(tableName+"."+"MESSAGEFLAG",messageFlag); } //userName /** * USERNAME の Getter です。<BR><BR> * @return このインスタンスの USERNAME */ public String getUserName(){ return (String)getField("USERNAME"); フィールド 取得・設定 メソッド } /** * USERNAME の Setter です。<BR><BR> * @param userName このインスタンスの USERNAME にセットしたい値 */ public void setUserName(String userName){ fieldMap.put(tableName+"."+"USERNAME",userName); } //userPassword /** * USERPASSWORD の Getter です。<BR><BR> * @return このインスタンスの USERPASSWORD */ public String getUserPassword(){ return (String)getField("USERPASSWORD"); } /** * USERPASSWORD の Setter です。<BR><BR> * @param userPassword このインスタンスの USERPASSWORD にセットしたい値 */ public void setUserPassword(String userPassword){ fieldMap.put(tableName+"."+"USERPASSWORD",userPassword); } //userEmail /** * USEREMAIL の Getter です。<BR><BR> * @return このインスタンスの USEREMAIL */ intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 41 public String getUserEmail(){ return (String)getField("USEREMAIL"); } /** * USEREMAIL の Setter です。<BR><BR> * @param userEmail このインスタンスの USEREMAIL にセットしたい値 */ public void setUserEmail(String userEmail){ fieldMap.put(tableName+"."+"USEREMAIL",userEmail); } //userHpName /** * USERHPNAME の Getter です。<BR><BR> * @return このインスタンスの USERHPNAME */ public String getUserHpName(){ return (String)getField("USERHPNAME"); } /** * USERHPNAME の Setter です。<BR><BR> * @param userHpName このインスタンスの USERHPNAME にセットしたい値 */ public void setUserHpName(String userHpName){ fieldMap.put(tableName+"."+"USERHPNAME",userHpName); } フィールド //userHpUrl /** * USERHPURL の Getter です。<BR><BR> * @return このインスタンスの USERHPURL */ public String getUserHpUrl(){ return (String)getField("USERHPURL"); } /** * USERHPURL の Setter です。<BR><BR> * @param userHpUrl このインスタンスの USERHPURL にセットしたい値 */ public void setUserHpUrl(String userHpUrl){ fieldMap.put(tableName+"."+"USERHPURL",userHpUrl); } //userAge /** * USERAGE の Getter です。<BR><BR> * @return このインスタンスの USERAGE */ public BigDecimal getUserAge(){ return (BigDecimal)getField("USERAGE"); } /** * USERAGE の Setter です。<BR><BR> * @param userAge このインスタンスの USERAGE にセットしたい値 */ public void setUserAge(BigDecimal userAge){ fieldMap.put(tableName+"."+"USERAGE",userAge); } 42 取得・設定 メソッド 4 DAO ジェネレータによる作成 /** * USERAGE の Setter です。(文字列インタフェースを用意する)<BR><BR> * @param userAge このインスタンスの USERAGE にセットしたい値 */ public void setUserAge(String userAge){ fieldMap.put(tableName+"."+"USERAGE",getBigDecimalVal(userAge)); } //userSex /** * USERSEX の Getter です。<BR><BR> * @return このインスタンスの USERSEX */ public String getUserSex(){ return (String)getField("USERSEX"); } /** フィールド * USERSEX の Setter です。<BR><BR> * @param userSex このインスタンスの USERSEX にセットしたい値 */ 取得・設定 メソッド public void setUserSex(String userSex){ fieldMap.put(tableName+"."+"USERSEX",userSex); } //userFeel /** * USERFEEL の Getter です。<BR><BR> * @return このインスタンスの USERFEEL */ public String getUserFeel(){ return (String)getField("USERFEEL"); } /** * USERFEEL の Setter です。<BR><BR> * @param userFeel このインスタンスの USERFEEL にセットしたい値 */ public void setUserFeel(String userFeel){ fieldMap.put(tableName+"."+"USERFEEL",userFeel); } /** * Bean をマッピングするときに使うキーを返します。<BR><BR> * * @return Object 型のこの Bean のキー */ public Object getKey(){ if (getField("MESSAGEID") == null){ return ""; } return ""+(String)(getField("MESSAGEID")).toString(); } /** * BBMessageModelObject の対象テーブル名をセットします。<BR><BR> */ public void setTableName(){ this.tableName="BBMESSAGE"; } intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 43 /** * BBMessageModelObject のモデルオブジェクト名をセットします。<BR><BR> */ public void setModelName(){ this.modelName="BBMessage"; } /** * BBMessageModelObject の対象テーブルの主キー情報を Map にセットします。<BR><BR> */ public void setPkMap(){ PKMap.put("MESSAGEID","10"); } /** * BBMessageModelObject の対象テーブルのカラムマップにオブジェクトメンバーをセットします。<BR><BR> */ public void setFieldMap(){ fieldMap.put(tableName+"."+"MESSAGEID",null); fieldMap.put(tableName+"."+"PARENTID",null); fieldMap.put(tableName+"."+"MESSAGESUBJECT",null); fieldMap.put(tableName+"."+"MESSAGEDATE",null); fieldMap.put(tableName+"."+"MESSAGEBODY",null); fieldMap.put(tableName+"."+"MESSAGEFLAG",null); fieldMap.put(tableName+"."+"USERNAME",null); fieldMap.put(tableName+"."+"USERPASSWORD",null); fieldMap.put(tableName+"."+"USEREMAIL",null); fieldMap.put(tableName+"."+"USERHPNAME",null); fieldMap.put(tableName+"."+"USERHPURL",null); fieldMap.put(tableName+"."+"USERAGE",null); fieldMap.put(tableName+"."+"USERSEX",null); fieldMap.put(tableName+"."+"USERFEEL",null); } /** * BBMessageModelObject のインスタンスを返します。<BR><BR> * @return BBMessageModelObject のインスタンス */ public ModelObject createInstance(){ return new BBMessageModelObject(); } } (4) DataConfig_BBPage.properties #Start 2003/08/20 10:56:57 #---------------------------------------# dao.class.BBMessage=imsg.sample.BBPage.model.data.BBMessageDAO dao.connector.BBMessage=intra_mart_db #End #---------------------------------------- 44 5 5 VIEW ジェネレータによる作成 VIEW ジェネレータによる作成 画面表示 項 目、チェ ッ ク条件、イ ベント定 義 などの情 報 を記述した Excel シートを読み込 み、JSP、ServiceController、ViewObject、ViewIdentifer、ServiceConfig、mapping を 自動生成 し ます。 VIEW シ ー ト の 構 成 (1) 更新履歴シート Excel ファイルの更 新 履歴を入 力 します。 作成される java ファイルには反 映 されませ ん 。 (2) ファイル出力先定義シート 生成ファ イ ルの出力 先 を入力し ま す。 このシー ト の必須項 目 は必ず入 力 してくだ さ い。 (3) 画面イメージシート 画面イメ ー ジや設計 資 料を貼り 付 けます。 作成される java ファイルには反 映 されませ ん 。 (4) 画面オブジェクト構成定義シート 画面オブ ジ ェクトの 構 成と JSP 画面のアク シ ョン定義 を 記述しま す 。 (5) 画面詳細定義シート 画面オブ ジ ェクトの 詳 細定義を 記 述します 。 画面オブ ジ ェクトシ ー トに記述 し た、画面 オ ブジェク ト 数だけこ の シートが 必 要です。 (6) 入力チェック定義シート 画面 UI の入力チェッ ク 定義を記 述 します。 追加する場合のみ追記します。使用しない場合は既存のものをそのまま残してください。 (7) JSP 画面表示項目複数選択値リストシート JSP のリストボック ス やドロッ プ ダウンリ ス ト等の選 択 肢となる デ ータを記 述 します。 1 セットの画面オブジェクトを作成するには、「ファイル出力先定義」シート、「画面オブジェ クト構成定義」シート、「画面詳細定義」シート×画面オブジェクト数、「入力チェック定義」 シート、「JSP 画面表示項目複数選択値リスト」シートが必要です。 複数セットの画面オブジェクトを作成するには、「画面オブジェクト構成定義」シート、「画面 詳細定義」シート×画面オブジェクト数をセット数分追加してください。 「画面オブジェクト構成定義」シート、「画面詳細定義」シートは各シートの「画面名」、「画 面 ID」、「Java データ型/クラス名」が同一のもので 1 セットと見なされます。 「画面 ID」はセッションスコープへ情報を格納する場合のキーになりますのでシステム上でユニ ークな名称を記述して下さい。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 45 VIEW シ ー ト の 作 成 ファイル出力先定義シート ----------------------------------------------「ファイ ル 出力定義 」部分には 生 成ソース フ ァイルの 出 力パスを 入 力します 。このフォル ダが無い 場 合は新た に フォルダ が 作成され ま す。 D ○ A ○ E ○ B ○ C ○ A JSPファイル出力先 ○ JSP ファイルを 出 力する AP サーバのコ ン テキスト パ スを記述 し ます。 B ○ コンテキストパスからの相対パス JSP を配置する コ ンテキス ト パスから の 相対パス を 記述しま す 。 JSP ファイルは「JSP ファイル 出力先」 + 「コンテ キ ストパス か らの相対 パ ス」に出力 されます 。 この相対 パスはフ ァ イル出力 先 と ServiceConfig 内のパスで使 用 されます 。 C ソースファイル出力先 ○ ソー ス ファイル を 出力する フ ォルダを 記 述します 。 D プロパティファイル出力先 ○ ServiceConfig_XXX.properties ファイルを出 力 するフォ ル ダを指定 し ます。 E 備考 ○ 備考があ れ ば記述し ま す。 46 5 VIEW ジェネレータによる作成 画面オブジェクト構成定義シート ----------------------------------------上部に画 面 オブジェ ク トの構造 、 下部に画 面 内のアク シ ョンを記 述 します。 画面オブジェクト構成 画面オブジェクトは画面の入力コントロールの情報やテキストなどの情報を保持する JavaBean です。 画面には 画 面全体を 表 すメイン 画 面オブジ ェ クトがあ り 、掲示板ア プリケー シ ョンの入力 フォームのような単純に配置されたコントロールはメイン画面オブジェクトのプロパテ ィになり ま す。 記事一覧 の ように繰 り 返しのあ る ものは List 型で表現 で きます。 ただし、VIEW ジェネレ ータでは List 型に格納できるの は 画面オブ ジ ェクトの み の為、サ ブ画面オ ブ ジェクト と いう List 型格納用 の 画面オブ ジ ェクトを 定 義するこ と になりま す。 このよう に 画面オブ ジ ェクトは 入 れ子にす る ことがで き 、掲示板ア プリケー シ ョンの記事 一覧部分 で は、メイン 画面オブ ジ ェクト(メッ セージ入 力 フォーム)の 中にルー ト メッセー ジ一覧(記事 の一覧)があ り、さらに その中に 子 メッセー ジ 一覧(返信記 事の一覧)が あると いう親- 子 -孫の構 造 です。 メイン画 面 オブジェ ク ト メ ッ セ ー ジ 入 力 フ ォ ー ム (BBPageList) 掲示板アプリケーション 入力フォーム サブ画面 オ ブジェク ト ル ー ト メ ッ セ ー ジ 一 覧 (rootMessageList) 子 メ ッ セ ー ジ 一 覧 (childMessageList) 記事 返信記事 掲示板アプリケーションでは特に記事と返信記事の情報がほとんど同じであることため、 ル ー ト メ ッ セ ー ジ 一 覧 と 子 メ ッ セ ー ジ 一 覧 は 同 じ BBPageMessageViewObject ク ラ ス を 使 用します 。 JSP 画面アクション定義 ここに記 述 した情報 は 画面上の ボ タンとして JSP ソースに出力さ れ ます。ま た 、画面遷移 情報として ServiceConfig_XXX.properties ファイルにも 出 力されま す 。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 47 B ○ C ○ A ○ D ○ E ○ H ○ I ○ F J ○ ○ N ○ O ○ G K ○ ○ M ○ L ○ P ○ A アプリケーション名 ○ アプリケ ー ション名 を 記述しま す 。 この名称 がサービ ス フレーム ワ ークのサ ー ビス名に な ります。 B ○ メイン画面オブジェクトの画面名 メイン画 面 オブジェ ク トの画面 名 を指定し ま す。 コメント 扱いなの で 日本語名 称 が記述で き ます。 C 画面ID ○ シス テ ム中でこ の 画面を特 定 できるユ ニ ークな ID を記述しま す 。 画面 ID はセッション ス コープに 情 報を格納 す る際のキ ー としても 使 用されま す 。 D パッケージ名 ○ 生成 さ れる Java クラスのパ ッ ケージ名 を 記述しま す 。 E ベースファイル名 ○ JSP、ServiceController などの基 本のファ イ ル名を記 述 します。 JSP なら、生成され る ファイル 名 は ベース フ ァイル名 +”.jsp” ServiceController なら、 ベース フ ァイル名 + “ServiceController.java” 48 5 VIEW ジェネレータによる作成 F メイン画面オブジェクトのJava定義名 ○ プログラ ム 中でメイ ン 画面オブ ジ ェクトを 表 す変数の 名 称を記述 し ます。 G ○ メイン画面オブジェクトのJavaデータ型 メイ ン 画面オブ ジ ェクトの J avaデ ー タ型を指 定 します。 この型は 「画面詳 細 定義」シ ー トのクラ ス 名と一致 し ている必 要 がありま す 。・ H メイン画面オブジェクトのコメント ○ コメント を 入力しま す 。 I サブ画面オブジェクト名 ○ サブ画面 オ ブジェク ト 名を指定 し ます。 コメント 扱 いなので 日 本語で記 述 できます 。 J サブ画面オブジェクトのJava定義名 ○ サ ブ 画 面 オ ブ ジ ェ ク ト が 格 納 さ れ る 親 オ ブ ジ ェ ク ト の 「 画 面 詳 細 定 義 」 シ ー ト に ある 、 対応する 子 オブジェ ク ト型の Java 定義名を 記 述します 。 K サブ画面オブジェクトのJavaデータ型 ○ サブ 画 面オブジ ェ クトのJ a vaデー タ 型を記述 し ます。 この型は 「 画面詳細 定 義」シー ト のクラス 名 と一致し て いる必要 が あります 。・ L サブ画面オブジェクトの Parent クラス型 ○ サブ画面 オ ブジェク ト が格納さ れ る親オブ ジ ェクトの ク ラス型を 記 述します 。・ M サブ画面オブジェクトのコメント ○ コメ ン トを入力 し ます。 N JSP 画面アクション名 ○ JSP 画面アクション 名 を指定し ま す。 この名称 は ボタンの キ ャプショ ン になりま す 。日本語 で 記述でき ま す。 O サービスコントローラ設定キー ○ この ア クション の・サービス コ ントロー ラ 設定キー を 記述しま す 。 P ○ JSP 画面アクションのコメント コメ ン トを入力 し ます。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 49 画面詳細定義シート ----------------------------------------------------画面オブ ジ ェクトの 詳 細情報を 記 述します 。 このシー ト は「画面 オ ブジェク ト 構成定義」 シートに 記 述された 画 面オブジ ェ クトの数 だ け必要で す 。 掲示板ア プ リケーシ ョ ンの場合 は 、 • メッセージ入力フォーム(BBPageListViewObject) • ルート/子メッセージ一覧(BBPageMessageViewObject) の2シー ト を作成し ま す。 メッセージ入力フォーム(BBPageListViewObject) A ○ D ○ E ○ F ○ G ○ B ○ C ○ I ○ J H ○ ○ K ○ L ○ M ○ ルート/子メッセージ一覧(BBPageMessageViewObject) A 画面名 ○ 「画 面 オブジェ ク ト構成」 シ ートと同 じ 画面名を 記 述します 。 B ○ クラス名 この 画 面オブジ ェ クトのクラス名を命名 し て記述し ま す。 C 画面ID ○ 「画 面 オブジェ ク ト構成」 シ ートと同 じ 画面IDを記 述します 。 50 N ○ O ○ 5 VIEW ジェネレータによる作成 D 画面項目名 ○ 画面 項 目名を記 述 します。 コメント 扱いなの で 日本語で 記 述できま す 。 E Java定義名 ○ この名称 が 画面オブ ジ ェクトの プ ロパティ 名 となりま す 。 同時にプ ロ パティに ア クセスする setter/getter も生成されます。 F 画面項目区分 ○ この項目が入力コントロールなら“入 力”を、表示項目なら“表 示”を指定し ます。 入力か表 示 を記述し た 場合、こ の 項目は JSP ソースに imsg タグとして出力さ れ ます。 空白の場 合 は画面オ ブ ジェクト の プロパテ ィ 、setter/getter は生成されますが JSP に は反映さ れ ません。 G データ型 ○ 「画面項 目 区分」が“ 入力”の場 合は選択 肢 として“テ キスト ”、“リスト ボ ックス ”等 の 入 力 コ ン ト ロ ー ル が 表 示 さ れ ま す 。 こ こ で 選 ん だ コ ン ト ロ ー ル に よ り 、 imsg タ グ が 決 定されま す 。 例えば、“ テキスト”を選択し た 場合、JSP ソースには<imsg:Text>タグが生成 さ れます。 サブオブ ジ ェクトを 加 えたいと き は、ここ で “子オブ ジ ェクト” を 選択しま す 。 「画面項 目区分 」が“表示 ”の 場合は String、または String 型にキャスト で きる Java データ型 を 記入して く ださい。 こ の項目は JSP ソースで は<imsg:View>タグにな ります。 H 初期値 ○ 初期値が あ る場合に 記 述します 。 I 属性値 ○ 項目が imsg タグとして出力されるときのタグの属性 値を記述します。 属性の詳細 はドキュメ ント「SourceGenerator タグライ ブ ラリ」を 参 照して下 さ い。 1.テキスト・パスワード・隠しフィールド の場合 size/maxlength 表示桁数/入力可能 最 大文字数 2.テキスト複数行入 力 の場合 cols/lows 表示桁数/表示行数 3.ラジオボタン・ドロップダウンリスト・チェックボックス の場合 設定 不要 4.リストボックス の場合 size 表示桁数 5.リストボックス(複数選択可能) の場合 size/multiple 表示桁数/複数選択 可 能か を記述します。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 51 J 入力チェック ○ 入力チェックを指定し ま す。 「チェッ ク ルール」 を 選択する と ここに追 加 されます 。 K チェックパラメータ ○ 入力チェ ッ クを指定 し て、その 入 力チェッ ク がパラメ ー タを必要 と する場合 、パラメー タ値を「,」 (カンマ)で 区切って 入 力します 。 入力チェックが複数指定されている場合はでチェックパラメータが必要になる度に左か ら使われ て いきます 。 チェック ル ールに必 要 なパラメ ー タの個数 は 「入力チ ェ ック定義」 シートの 「 メソッド の 引数個数 」 に記述さ れ ています 。 L チェックルール ○ 選択 肢 の中から 適 用したい チ ェックル ー ルを選択 し ます。 ここで選 択できる チ ェックル ー ルは「入力 チェック」シートに 記 述された チ ェッカー で す。 M マッピング加工・編集元の業務 OBJ 名 ○ 画面オブジェクトに対応する業務オブジェクトやモデルモデルオブジェクトがある場 合はその ク ラス名を 記 述します 。 N マッピング加工・編集元の項目名 ○ M に 記 述 し た ク ラ ス の 項 目 で 画 面 オ ブ ジ ェ ク ト の 項 目 に 対 応 す る 項 目 名 を 記 述しま ○ す。 O コメント ○ コメ ン トを入力 し ます。 52 5 VIEW ジェネレータによる作成 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 53 入力チェック定義シート ------------------------------------------------入力チェックは画面がサブミットされ、制御がサーバサイドに移った後、 ServiceContoroller で画面情報 を 画面オブ ジ ェクトに 格 納する際 に 行われま す 。 どのよう な チェック が 行われる か は画面詳 細 定義シー ト の「入力 チ ェック」で 指示されま す。 入 力 チ ェ ッ ク 定 義 シ ー ト は 、 「 入 力 チ ェ ッ ク 」 ・か ら 選 択 で き る チ ェ ッ ク 処 理 を メ ン テ ナ ンスする シ ートです 。 ここに項 目 を追加す る ことで「 入 力チェッ ク 」の選択 肢 を追加で き ます。 このシー ト には最初 か ら基本的 な チェック が いくつか 用 意されて い ます。 掲示板ア プ リケーシ ョ ンでは必 須 項目の必 須 チェック し か行って い ないため、記述は不要 です。 ※ このシー ト は VIEW ジェネレータ の 動作に必 要 なため、入 力 チェック を 追加する 以 外は そのまま 使 用して下 さ い。 A ○ 54 B ○ C ○ D ○ E ○ F ○ G ○ 5 VIEW ジェネレータによる作成 A 対象名 ○ 入力 チ ェックの 名 称を記述 し ます。 コメント 扱いなの で 日本語で 記 述できま す 。 B ○ チェッククラス名 チェ ッ クメソッ ド を持った ク ラス名を 記 述します 。 ここには アプリケ ー ション独 自 のチェッ ク クラスを 追 加できま す 。 C チェックメソッド名 ○ チェ ッ クロジッ ク を実装し た チェック ク ラス内のメソッド名を記述 します。 追 加 す る メ ソ ッ ド は boolean 型 を 返 し 、 OK な ら True、 NG な ら False を 返 し て 下 さ い 。 D メソッドの引数個数 ○ チェ ッ クメソッ ド に引数が あ る場合は 、 その個数 を 記述しま す 。 E メソッド引数のデータタイプ ○ チェック メ ソッドの 引 き数のデ ー タ型を記 述 します。 引き数が 2 つ以上あ る 場合はカ ン マ区切り で 複数記述 し ます。 F エラーメッセージ ○ チェック が エラーに な ったとき、画面オブ ジ ェクトに 記 録される メ ッセージ を 記述しま す。 G コメント ○ コメ ン トを入力 し ます。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 55 JSP 画面表示項目複数選択値リストシート ---------------------------------画面詳細 定 義シート で チェック ボ ックス、ラ ジオボタ ン 、ドロッ プ ダウンリ ス ト、リスト ボックス 、リストボ ッ クス(複 数 選択可能 )を使用し た 場合の選 択 肢の一覧 を 定義するシ ートです 。 これらの 入 力コント ロ ールを使 用 するとき に は、選択 肢 として、こ のシート の 値リスト名 を「初期 値 」に記述 す る必要が あ ります。 このシー ト は 1 シート で 3 つのリ ストを定 義 できます。3 つ以上の 値リスト が 必要な場合 は必要な 数 だけシー ト をコピー し て使用し て 下さい。 A ○ B ○ C ○ D ○ A リスト ID 名 ○ 値リ ス トを特定 で きるユニ ー クな名称 を 記述しま す 。 B 初期値 ○ ここ に “○”を 指 定した値 が コントロ ー ルの初期 値 になりま す 。 C ○ Value 値 選択 肢 の持つ値 ま たは文字 列 を記述し ま す。 D 項目名 ○ 選択 肢 の名称と し て画面に 表 示される 名 前を記述 し ます。 56 5 VIEW ジェネレータによる作成 VIEW ソ ー ス コ ー ド の 生 成 (1) VIEWGenerator を起動します。 (2) マクロを有効にするかどうか聞かれたら有効を選択します。 (3) ダイアログが表示されたら「実行ボタン」を押します。 デフォルトではマクロ終了時にソースコードを生成したフォルダをエクスプローラで開 きますが 、開きたく な い場合は 実 行ボタン を 押す前に「 マクロ終 了 時に出力 フ ォルダを開 く」チェ ッ クを外し て 下さい。 (4) 作成した VIEW シートを選択して「開く」ボタンを押します。 (5) 終了メッセージが表示されたら「OK」ボタンを押して終了します。 正常に終了した場合は、出力先に指定したフォルダにソースコードが生成されています。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 57 VIEW ソ ー ス コ ー ド の 説 明 生成ファイルの出力先 --------------------------------------------------「ファイ ル 出力先定 義 」シート に 記述した フ ォルダに フ ァイルが 生 成されま す 。 Java ソ ー ス コ ー ド は 出 力 先 フ ォ ル ダ 配 下 に さ ら に パ ッ ケ ー ジ の フ ォ ル ダ 階 層 が 作 成 さ れ ます。 (1) JSP ファイルの出力先 「jsp フ ァイル出 力 先」+「 コ ンテキス ト パス」フ ォ ルダ配下 の 、 「ベース フ ァイル名 」+”.jsp” (2) Java ソースファイルの出力先 「src フ ァイル出 力 先」フォ ル ダ配下に パ ッケージ の フォルダ 階 層が作成 さ れ、 その中の 所 定のフォ ル ダにソー ス ファイル が 生成され ま す。 「ベース フ ァイル名 」 +“ServiceController.java” 「ベース フ ァイル名 」 +“ViewIdentifier.java” 「画面オ ブ ジェクト ク ラス名 」+“ViewObject.java” 成) (メイン 、サ ブのシー ト 数だけ生 「src ファイル出力 先 」フォル ダ 配下には 、 マッピン グ テキスト が 生成され ま す。 “package_mapping_”+「画面オ ブ ジェクト ク ラス名」 + “.txt” (3) ServiceConfig_XXX.properties ファイルの出力先 「properties ファイル 出力先」 フ ォルダ配 下 の、 “ServiceConfig_”+「アプリケー シ ョン名」 +”.properties” 58 5 VIEW ジェネレータによる作成 掲示板アプリケーションの VIEW シートからはこのように出力されます。 [BBPage] ├ [contents] │ └ [imsg] │ └ [sample] │ └ [BBPage] │ └ [jsp] │ └ BBPageList.jsp ・JSP ソース ├ [properties] │ └ ServiceConfig_BBPage.properties ・ServiceConfig プロパティ └ [src] ├ [imsg] │ │ └ [sample] └ [BBPage] │ ├ [controller] │ │ │ │ │ └ [view] │ └ [service] └ BBPageListServiceController.java ・ServiceController ソース └ [object] │ ├ BBPageListViewIdentifier.java │ ├ BBPageListViewObject.java ・メイン ViewObject ソース ・ViewIdentifier ソース │ └ BBPageMessageViewObject.java ・サブ ViewObject ソース ├ package_mapping_BBPageList.txt ・メイン ViewOBject マッピングファイル └ package_mapping_BBPageMessageViewObject.txt ・サブ ViewObject マッピングファイル intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 59 掲示板アプリケーションの生成ファイル ----------------------------------掲示板ア プ リケーシ ョ ンの VIEW シートから 生 成される ソ ースファ イ ルです。 (1)BBPageList.jsp 画面表示 用 の jsp です。 (2)BBPageListServiceController.java リクエス ト データ(画面 情報)を ViewObject に格納し、ViewObject のチェック メ ソッ ドを呼び 出 し、画面 情 報の入力 チ ェックを 行 います。 (3)BBPageListViewIdentifier.java ViewObject が一意に定まる 識 別子を生 成 します。 (4)BBPageListViewObject.java 画面情報(メッセージ入力フォーム)を格納する親オブジェクトです。 (5)BBPageMessageViewObject.java 画面情報(子メッセージ一覧)を 格納する子オブジェクトです。 (6)package_mapping_BBPageList.txt ViewObject と ModelObject のマッピン グ 用のサン プ ルコード で す。 (7)package_mapping_BBPageMessageViewObject.txt ViewObject と ModelObject のマッピン グ 用のサン プ ルコード で す。 (8)ServiceConfig_BBPage.properties jsp のボタンが押さ れ た時に実 行 されるサ ー ビス、遷 移 先のペー ジ を設定し ま す。 画面情報の BBPageListViewObject 参照 BBPageList.jsp BBPageMessageViewObject 値 チェックエラー時 BBPageList ServiceController 画面情報の格納 値チェック BBPageList package_mapping_ ViewObject BBPageList ModelObject 60 BBPageMesssage package_mapping_BBPage ViewObject MessageViewObject 5 VIEW ジェネレータによる作成 (1) BBPageList.jsp <%@ page contentType="text/html; charset=Windows-31J" pageEncoding="Shift_JIS" %> <%--<%@ page errorPage="" %> --%> <%@ page import="java.util.*"%> <%@ page import="imsg.sample.BBPage.view.object.*"%> <%@ taglib prefix="imartj2ee" uri="http://www.intra-mart.co.jp/taglib/core/framework" %> <%@ taglib prefix="imtag" uri="http://www.intra-mart.co.jp/taglib/core/standard" %> <%@ taglib prefix="imsg" uri="/jp.co.intra_mart.framework.tools.sourcegenerator.taglib" %> <jsp:useBean id="BBPageList" class="imsg.sample.BBPage.view.object.BBPageListViewObject" scope="session" /> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> </HEAD> <BODY> <P>掲示板 (imsg サンプル)<BR> <imartj2ee:Form application="BBPage" service="BBPageListDefault" method="POST" name="mainfrm"> <INPUT type="submit" value="BBPageListServiceController を呼び出す"><BR> <!--入力チェックのエラー表示--> <FONT color="red"><%= BBPageList.getErrorMessageReadableText() %></FONT> <HR> <imsg:Hidden beanname="BBPageList" property="messageId" /> <imsg:Hidden beanname="BBPageList" property="parentId" /> 題名(*)<BR> <imsg:Text beanname="BBPageList" property="messageSubject" size="60" maxlength="100" /> <P> 本文(*)<BR> <imsg:TextArea beanname="BBPageList" property="messageBody" cols="60" rows="6"></imsg:TextArea> <P> <imsg:Hidden beanname="BBPageList" property="messageFlag" value="1" /> 名前(*)<BR> <imsg:Text beanname="BBPageList" property="userName" size="40" maxlength="100" /> <P> パスワード<BR> <imsg:Password beanname="BBPageList" property="userPassword" size="40" maxlength="100" /> <P> e-mail<BR> <imsg:Text beanname="BBPageList" property="userEmail" size="40" maxlength="100" /> <P> ホームページ名<BR> <imsg:Text beanname="BBPageList" property="userHpName" size="60" maxlength="100" /> <P> intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 61 ホームページ URL<BR> <imsg:Text beanname="BBPageList" property="userHpUrl" size="60" maxlength="100" /> <P> 年齢<BR> <imsg:Text beanname="BBPageList" property="userAge" size="6" maxlength="6" /> <P> 性別<BR> <imsg:Radio beanname="BBPageList" property="userSex" value="1" />男性<BR> <imsg:Radio beanname="BBPageList" property="userSex" value="2" />女性<BR> <P> 気分<BR> <imsg:Select beanname="BBPageList" property="userFeel"> <imsg:Option value="1">喜</imsg:Option> <imsg:Option value="2">怒</imsg:Option> <imsg:Option value="3">哀</imsg:Option> <imsg:Option value="4">楽</imsg:Option> </imsg:Select> <P> <%-- ルートメッセージ (ネストオブジェクト BBPageMessageViewObject) --%> <TABLE border="1"> <TR> <TH>No</TH> <TH>題名</TH> <TH>発信日時</TH> <TH>本文</TH> <TH>名前</TH> <TH>e-mail</TH> <TH>ホームページ名</TH> <TH>子メッセージ</TH> </TR> <% { String nest1_tagName = "rootMessageList$"; List nest1_list = BBPageList.getRootMessageList(); Iterator nest1_itr = null; int nest1_index = 0; if( nest1_list != null ) { nest1_itr = nest1_list.iterator(); } while( nest1_itr != null && nest1_itr.hasNext() ) { BBPageMessageViewObject nest1_viewObj = (BBPageMessageViewObject)nest1_itr.next(); %> <TR> <TD align="right"><%= nest1_index + 1 %> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="messageId" name="<%= nest1_tagName + nest1_index + "$messageId" %>" /> </TD> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="parentId" name="<%= nest1_tagName + nest1_index + "$parentId" %>" /> </TD> <%-- 題名 --%> <TD> <imsg:View beanname="<%= nest1_viewObj %>" property="messageSubject" /><BR> 62 5 VIEW ジェネレータによる作成 <imsg:Hidden beanname="<%= nest1_viewObj %>" property="messageSubject" name="<%= nest1_tagName + nest1_index + "$messageSubject" %>" /> </TD> <%-- 発信日時 --%> <TD> <imsg:View beanname="<%= nest1_viewObj %>" property="messageDate" /><BR> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="messageDate" name="<%= nest1_tagName + nest1_index + "$messageDate" %>" /> </TD> <%-- 本文 --%> <TD> <imsg:View beanname="<%= nest1_viewObj %>" property="messageBody" /><BR> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="messageBody" name="<%= nest1_tagName + nest1_index + "$messageBody" %>" /> </TD> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="messageFlag" name="<%= nest1_tagName + nest1_index + "$messageFlag" %>" /> </TD> <%-- 名前 --%> <TD> <imsg:View beanname="<%= nest1_viewObj %>" property="userName" /><BR> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="userName" name="<%= nest1_tagName + nest1_index + "$userName" %>" /> </TD> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="userPassword" name="<%= nest1_tagName + nest1_index + "$userPassword" %>" /> </TD> <%-- e-mail --%> <TD> <imsg:View beanname="<%= nest1_viewObj %>" property="userEmail" /><BR> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="userEmail" name="<%= nest1_tagName + nest1_index + "$userEmail" %>" /> </TD> <%-- ホームページ名 --%> <TD> <imsg:View beanname="<%= nest1_viewObj %>" property="userHpName" /><BR> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="userHpName" name="<%= nest1_tagName + nest1_index + "$userHpName" %>" /> </TD> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="userHpUrl" name="<%= nest1_tagName + nest1_index + "$userHpUrl" %>" /> </TD> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="userAge" name="<%= nest1_tagName + nest1_index + "$userAge" %>" /> </TD> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="userSex" name="<%= nest1_tagName + nest1_index + "$userSex" %>" /> </TD> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="userFeel" name="<%= nest1_tagName + nest1_index + "$userFeel" %>" /> </TD> <%-- 子メッセージ --%> <TD> <%-- 子メッセージ (ネストオブジェクト BBPageMessageViewObject) --%> <TABLE border="1"> <TR> <TH>No</TH> <TH>題名</TH> <TH>発信日時</TH> intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 63 <TH>本文</TH> <TH>名前</TH> <TH>e-mail</TH> <TH>ホームページ名</TH> <TH>子メッセージ</TH> </TR> <% { String nest2_tagName = new String(nest1_tagName + nest1_index + "$childMessageList$"); List nest2_list = nest1_viewObj.getChildMessageList(); Iterator nest2_itr = null; int nest2_index = 0; if( nest2_list != null ) { nest2_itr = nest2_list.iterator(); } while( nest2_itr != null && nest2_itr.hasNext() ) { BBPageMessageViewObject nest2_viewObj = (BBPageMessageViewObject)nest2_itr.next(); %> <TR> <TD align="right"><%= nest2_index + 1 %> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="messageId" name="<%= nest2_tagName + nest2_index + "$messageId" %>" /> </TD> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="parentId" name="<%= nest2_tagName + nest2_index + "$parentId" %>" /> </TD> <%-- 題名 --%> <TD> <imsg:View beanname="<%= nest2_viewObj %>" property="messageSubject" /><BR> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="messageSubject" name="<%= nest2_tagName + nest2_index + "$messageSubject" %>" /> </TD> <%-- 発信日時 --%> <TD> <imsg:View beanname="<%= nest2_viewObj %>" property="messageDate" /><BR> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="messageDate" name="<%= nest2_tagName + nest2_index + "$messageDate" %>" /> </TD> <%-- 本文 --%> <TD> <imsg:View beanname="<%= nest2_viewObj %>" property="messageBody" /><BR> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="messageBody" name="<%= nest2_tagName + nest2_index + "$messageBody" %>" /> </TD> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="messageFlag" name="<%= nest2_tagName + nest2_index + "$messageFlag" %>" /> </TD> <%-- 名前 --%> <TD> <imsg:View beanname="<%= nest2_viewObj %>" property="userName" /><BR> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="userName" name="<%= nest2_tagName + nest2_index + "$userName" %>" /> </TD> 64 5 VIEW ジェネレータによる作成 <imsg:Hidden beanname="<%= nest2_viewObj %>" property="userPassword" name="<%= nest2_tagName + nest2_index + "$userPassword" %>" /> </TD> <%-- e-mail --%> <TD> <imsg:View beanname="<%= nest2_viewObj %>" property="userEmail" /><BR> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="userEmail" name="<%= nest2_tagName + nest2_index + "$userEmail" %>" /> </TD> <%-- ホームページ名 --%> <TD> <imsg:View beanname="<%= nest2_viewObj %>" property="userHpName" /><BR> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="userHpName" name="<%= nest2_tagName + nest2_index + "$userHpName" %>" /> </TD> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="userHpUrl" name="<%= nest2_tagName + nest2_index + "$userHpUrl" %>" /> </TD> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="userAge" name="<%= nest2_tagName + nest2_index + "$userAge" %>" /> </TD> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="userSex" name="<%= nest2_tagName + nest2_index + "$userSex" %>" /> </TD> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="userFeel" name="<%= nest2_tagName + nest2_index + "$userFeel" %>" /> </TD> <%-- 子メッセージ --%> <TD> </TD> </TR> <% nest2_index++; } } %> </TABLE> </TD> </TR> <% nest1_index++; } } %> </TABLE> <imsg:Hidden beanname="BBPageList" property="selectedId" /> <HR> <imartj2ee:Submit service="entry" value="投稿" /><BR> <imartj2ee:Submit service="reply" value="返信" /><BR> <imartj2ee:Submit service="erace" value="削除" /><BR> </imartj2ee:Form> </BODY> </HTML> intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 65 (2) BBPageListServiceController.java /* * BBPageListServiceController.java * * Created on 2003/08/15, 13:59 */ package imsg.sample.BBPage.controller.service; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import jp.co.intra_mart.framework.base.service.RequestException; import jp.co.intra_mart.framework.base.service.ServiceControllerAdapter; import jp.co.intra_mart.framework.base.service.ServiceResult; import jp.co.intra_mart.framework.system.exception.ApplicationException; import jp.co.intra_mart.framework.system.exception.SystemException; import imsg.sample.BBPage.view.object.*; /** * @author * @version 1.0 */ public class BBPageListServiceController extends ServiceControllerAdapter { /** * 入力内容をチェックします * @throws RequestException 入力内容に誤りがある * @throws SystemException チェック時にシステム例外が発生 * */ public void check() throws RequestException, SystemException { HttpServletRequest req = getRequest(); HttpSession session = req.getSession(); String viewId = (new BBPageListViewIdentifier()).getId(); // ViewObject の読込、または新規作成 BBPageListViewObject viewObj = (BBPageListViewObject)session.getAttribute(viewId); if( viewObj == null ) { viewObj = new BBPageListViewObject(); } // Request パラメータを ViewObject に格納 viewObj.setPropertiesFromRequest( req ); // 入力チェック viewObj.check(); // if( viewObj.isValid()) { // // 入力チェック OK // } // else { // // 入力チェックエラー // // throw new RequestException(); } //ViewObject をセッションに格納 66 5 VIEW ジェネレータによる作成 session.setAttribute( viewId, viewObj); } public ServiceResult service() throws SystemException, ApplicationException { HttpServletRequest req = getRequest(); HttpSession session = req.getSession(); String viewId = new BBPageListViewIdentifier().getId(); // ViewObject の取得 BBPageListViewObject viewObj = (BBPageListViewObject)session.getAttribute(viewId); ServiceResult serviceResult = null; return serviceResult; } } (3) BBPageListViewIdentifier.java /* * BBPageListViewIdentifier.java * * Created on 2003/08/15, 13:59 */ package imsg.sample.BBPage.view.object; import jp.co.intra_mart.framework.tools.sourcegenerator.view.ViewIdentifier; /** * BBPageListViewObject を特定する識別子です。 * @author - * @version 1.0 */ public class BBPageListViewIdentifier extends ViewIdentifier { /** * インスタンスを生成します。 * */ public BBPageListViewIdentifier() { super("BBPageList"); } } intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 67 (4) BBPageListViewObject.java javadoc より メソッドの概要 boolean check() チ ェ ッ ク メ ソ ッ ド を 呼 び 出 し ま す 。投 稿 、返 信 の 際 に 画 面 の 入力内容をチェックします。 java.lang.String getMessageBody() 本 文 (*)を 取 得 し ま す 。 java.util.Date getMessageDate() 発信日時を取得します。 java.lang.String getMessageFlag() メッセージフラグを取得します。 java.lang.String getMessageId() メ ッ セ ー ジ ID を 取 得 し ま す 。 java.lang.String getMessageSubject() 題 名 (*)を 取 得 し ま す 。 java.lang.String getParentId() 親 メ ッ セ ー ジ ID を 取 得 し ま す 。 java.lang.String getPropertyName(java.lang.String tagName) プロパティ名に対応する日本語名称を返します。 java.util.List getRootMessageList() ル ー ト メ ッ セ ー ジ を 取 得 し ま す 。記 事 一 覧 取 得 の 際 に 呼 ば れ ます。 java.lang.String getSelectedId() 選 択 メ ッ セ ー ジ ID を 取 得 し ま す 。 削 除 の 際 に 呼 ば れ ま す 。 java.lang.String getUserAge() 年齢を取得します。 java.lang.String getUserEmail() e-mail を 取 得 し ま す 。 java.lang.String[] getUserFeel() 気分を取得します。 java.lang.String getUserHpName() ホームページ名を取得します。 java.lang.String getUserHpUrl() ホ ー ム ペ ー ジ URL を 取 得 し ま す 。 java.lang.String getUserName() 名 前 (*)を 取 得 し ま す 。 java.lang.String getUserPassword() パスワードを取得します。 java.lang.String getUserSex() 性別を取得します。 void setMessageBody(java.lang.String string) 本 文 (*)を セ ッ ト し ま す 。 void setMessageDate(java.util.Date date) 発信日時をセットします。 void setMessageFlag(java.lang.String string) メッセージフラグをセットします。 void setMessageId(java.lang.String string) メ ッ セ ー ジ ID を セ ッ ト し ま す 。 68 5 VIEW ジェネレータによる作成 void setMessageSubject(java.lang.String string) 題 名 (*)を セ ッ ト し ま す 。 void setParentId(java.lang.String string) 親 メ ッ セ ー ジ ID を セ ッ ト し ま す 。 void setPropertyRequestMap(java.util.Map map) リ ク エ ス ト パ ラ メ ー タ Map を ViewObject に と り こ み ま す 。 void setRootMessageList(java.util.List list) ルートメッセージをセットします。 void setSelectedId(java.lang.String string) 選 択 メ ッ セ ー ジ ID を セ ッ ト し ま す 。 void setUserAge(java.lang.String string) 年齢をセットします。 void setUserEmail(java.lang.String string) e-mail を セ ッ ト し ま す 。 void setUserFeel(java.lang.String[] strings) 気分をセットします。 void setUserHpName(java.lang.String string) ホームページ名をセットします。 void setUserHpUrl(java.lang.String string) ホ ー ム ペ ー ジ URL を セ ッ ト し ま す 。 void setUserName(java.lang.String string) 名 前 (*)を セ ッ ト し ま す 。 void setUserPassword(java.lang.String string) パスワードをセットします。 void setUserSex(java.lang.String string) 性別をセットします。 /* * BBPageListViewObject.java * * Created on 2003/08/15, 13:59 */ package imsg.sample.BBPage.view.object; import java.util.*; import jp.co.intra_mart.framework.tools.sourcegenerator.util.InputCheck; import jp.co.intra_mart.framework.tools.sourcegenerator.util.StringCompilation; import jp.co.intra_mart.framework.tools.sourcegenerator.view.ViewObject; import jp.co.intra_mart.framework.tools.sourcegenerator.view.ViewObjectIF; /** * BBPageListViewObject * @author - * @version 1.0 */ public class BBPageListViewObject extends ViewObject implements ViewObjectIF { /** メッセージ ID */ private String messageId; intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 69 /** 親メッセージ ID */ private String parentId; /** 題名(*) */ private String messageSubject; /** 発信日時 */ private Date messageDate; /** 本文(*) */ private String messageBody; /** メッセージフラグ */ private String messageFlag = "1"; /** 名前(*) */ private String userName; /** パスワード */ private String userPassword; /** e-mail */ private String userEmail; /** ホームページ名 */ private String userHpName; /** ホームページ URL */ private String userHpUrl; /** 年齢 */ private String userAge; /** 性別 */ private String userSex; /** 気分 */ private String[] userFeel; /** ルートメッセージ */ private List rootMessageList; /** 選択メッセージ ID */ private String selectedId; /** * インスタンスを生成します。 * */ public BBPageListViewObject() { super("BBPageList"); if( rootMessageList == null ) { rootMessageList = new Vector(); } while ( rootMessageList.size() < 2 ) { 70 5 VIEW ジェネレータによる作成 rootMessageList.add( new BBPageMessageViewObject()); } } /** * 指定の識別子を持つインスタンスを生成します。 * * @param name 識別子 */ public BBPageListViewObject(String name) { super(name); } /** * メッセージ ID を取得します。 * * @return メッセージ ID */ public String getMessageId() { return messageId; } /** * 親メッセージ ID を取得します。 * * @return 親メッセージ ID */ public String getParentId() { return parentId; } /** * 題名(*)を取得します。 * * @return 題名(*) プロパティ 取得メソッド */ public String getMessageSubject() { return messageSubject; } /** * 発信日時を取得します。 * * @return 発信日時 */ public Date getMessageDate() { return messageDate; } /** * 本文(*)を取得します。 * * @return 本文(*) */ public String getMessageBody() { return messageBody; intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 71 } /** * メッセージフラグを取得します。 * * @return メッセージフラグ */ public String getMessageFlag() { return messageFlag; } /** * 名前(*)を取得します。 * * @return 名前(*) */ public String getUserName() { return userName; } /** * パスワードを取得します。 * * @return パスワード */ public String getUserPassword() { return userPassword; } プロパティ 取得メソッド /** * e-mail を取得します。 * * @return e-mail */ public String getUserEmail() { return userEmail; } /** * ホームページ名を取得します。 * * @return ホームページ名 */ public String getUserHpName() { return userHpName; } /** * ホームページ URL を取得します。 * * @return ホームページ URL */ public String getUserHpUrl() { return userHpUrl; } /** * 年齢を取得します。 * 72 5 VIEW ジェネレータによる作成 * @return 年齢 */ public String getUserAge() { return userAge; } /** * 性別を取得します。 * * @return 性別 */ public String getUserSex() { return userSex; } /** * 気分を取得します。 * * @return 気分 プロパティ 取得メソッド */ public String[] getUserFeel() { return userFeel; } /** * ルートメッセージを取得します。 * * @return ルートメッセージ */ public List getRootMessageList() { return rootMessageList; } /** * 選択メッセージ ID を取得します。 * * @return 選択メッセージ ID */ public String getSelectedId() { return selectedId; } /** * メッセージ ID を設定します。 * * @param string メッセージ ID */ public void setMessageId(String string) { messageId = string; プロパティ } 設定メソッド /** * 親メッセージ ID を設定します。 * * @param string 親メッセージ ID */ public void setParentId(String string) { parentId = string; } intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 73 /** * 題名(*)を設定します。 * * @param string 題名(*) */ public void setMessageSubject(String string) { messageSubject = string; } /** * 発信日時を設定します。 * * @param date 発信日時 */ public void setMessageDate(Date date) { messageDate = date; } /** * 本文(*)を設定します。 * * @param string 本文(*) */ public void setMessageBody(String string) { messageBody = string; } /** * メッセージフラグを設定します。 * * @param string メッセージフラグ */ public void setMessageFlag(String string) { messageFlag = string; } /** * 名前(*)を設定します。 * * @param string 名前(*) */ public void setUserName(String string) { userName = string; } /** * パスワードを設定します。 * * @param string パスワード */ public void setUserPassword(String string) { userPassword = string; } /** * e-mail を設定します。 * * @param string e-mail 74 プロパティ 設定メソッド 5 VIEW ジェネレータによる作成 */ public void setUserEmail(String string) { userEmail = string; } /** * ホームページ名を設定します。 * * @param string ホームページ名 */ public void setUserHpName(String string) { userHpName = string; } /** * ホームページ URL を設定します。 * * @param string ホームページ URL */ public void setUserHpUrl(String string) { userHpUrl = string; } /** * 年齢を設定します。 * * @param string 年齢 */ public void setUserAge(String string) { userAge = string; } プロパティ 設定メソッド /** * 性別を設定します。 * * @param string 性別 */ public void setUserSex(String string) { userSex = string; } /** * 気分を設定します。 * * @param strings 気分 */ public void setUserFeel(String[] strings) { userFeel = strings; } /** * ルートメッセージを設定します。 * * @param list ルートメッセージ */ public void setRootMessageList(List list) { rootMessageList = list; } intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 75 /** * 選択メッセージ ID を設定します。 プロパティ * * @param string 選択メッセージ ID 設定メソッド */ public void setSelectedId(String string) { selectedId = string; } /** * プロパティ名に対応する日本語名称を返します。 * * @param tagName HTML タグの name 属性 * @return name に対応する日本語名称 */ public String getPropertyName(String tagName) { String propertyName = null; if(tagName.equals("messageId")) propertyName = "メッセージ ID"; else if(tagName.equals("parentId")) propertyName = "親メッセージ ID"; else if(tagName.equals("messageSubject")) propertyName = "題名(*)"; else if(tagName.equals("messageBody")) propertyName = "本文(*)"; else if(tagName.equals("messageFlag")) propertyName = "メッセージフラグ"; else if(tagName.equals("userName")) propertyName = "名前(*)"; else if(tagName.equals("userPassword")) propertyName = "パスワード"; else if(tagName.equals("userEmail")) propertyName = "e-mail"; else if(tagName.equals("userHpName")) propertyName = "ホームページ名"; else if(tagName.equals("userHpUrl")) propertyName = "ホームページ URL"; else if(tagName.equals("userAge")) propertyName = "年齢"; else if(tagName.equals("userSex")) propertyName = "性別"; プロパティ名 取得メソッド else if(tagName.equals("userFeel")) propertyName = "気分"; else if(tagName.equals("selectedId")) propertyName = "選択メッセージ ID"; else if(tagName.equals("messageId")) propertyName = "メッセージ ID"; else if(tagName.equals("parentId")) propertyName = "親メッセージ ID"; else if(tagName.equals("messageSubject")) propertyName = "題名"; else if(tagName.equals("messageDate")) propertyName = "発信日時"; else if(tagName.equals("messageBody")) propertyName = "本文"; else if(tagName.equals("messageFlag")) propertyName = "メッセージフラグ"; else if(tagName.equals("userName")) propertyName = "名前"; else if(tagName.equals("userPassword")) propertyName = "パスワード"; else if(tagName.equals("userEmail")) propertyName = "e-mail"; else if(tagName.equals("userHpName")) propertyName = "ホームページ名"; else if(tagName.equals("userHpUrl")) propertyName = "ホームページ URL"; else if(tagName.equals("userAge")) propertyName = "年齢"; else if(tagName.equals("userSex")) propertyName = "性別"; else if(tagName.equals("userFeel")) propertyName = "気分"; return propertyName; } /** * リクエストパラメータ Map を ViewObject にとりこみます。 * * @param map key:プロパティ名(String) value:値(String or String[] or ViewObject) */ public void setPropertyRequestMap(Map map) { // メッセージ ID if(map.containsKey("messageId")) { this.messageId = ((String[])map.get("messageId"))[0]; 76 Map を ViewObject に セットする メソッド 5 VIEW ジェネレータによる作成 } // 親メッセージ ID if(map.containsKey("parentId")) { this.parentId = ((String[])map.get("parentId"))[0]; } // 題名(*) if(map.containsKey("messageSubject")) { this.messageSubject = ((String[])map.get("messageSubject"))[0]; } // 本文(*) if(map.containsKey("messageBody")) { this.messageBody = ((String[])map.get("messageBody"))[0]; } // メッセージフラグ if(map.containsKey("messageFlag")) { this.messageFlag = ((String[])map.get("messageFlag"))[0]; } // 名前(*) if(map.containsKey("userName")) { this.userName = ((String[])map.get("userName"))[0]; } // パスワード if(map.containsKey("userPassword")) { this.userPassword = ((String[])map.get("userPassword"))[0]; } Map を ViewObject に // e-mail if(map.containsKey("userEmail")) { セットする メソッド this.userEmail = ((String[])map.get("userEmail"))[0]; } // ホームページ名 if(map.containsKey("userHpName")) { this.userHpName = ((String[])map.get("userHpName"))[0]; } // ホームページ URL if(map.containsKey("userHpUrl")) { this.userHpUrl = ((String[])map.get("userHpUrl"))[0]; } // 年齢 if(map.containsKey("userAge")) { this.userAge = ((String[])map.get("userAge"))[0]; } // 性別 if(map.containsKey("userSex")) { this.userSex = ((String[])map.get("userSex"))[0]; } // 気分 userFeel= null; intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 77 if(map.containsKey("userFeel")) { this.userFeel = ((String[])map.get("userFeel")); Map を } ViewObject に { セットする // ルートメッセージ メソッド Iterator requestItr = map.keySet().iterator(); Map childObjectMapMap = new HashMap(); // while( requestItr.hasNext() ) { String requestKey = (String)requestItr.next(); String[] requestKeyArray = StringCompilation.split(requestKey, "$", 3); Map childObjectMap; // キーの先頭が rootMessageList であるとき if( requestKeyArray[0].equals("rootMessageList") && requestKeyArray.length == 3 ) { Integer childObjectKey = Integer.valueOf(requestKeyArray[1]); マップに put す る if( childObjectMapMap.containsKey( childObjectKey ) ) { childObjectMap = (Map)childObjectMapMap.get( childObjectKey ); } else { childObjectMap = new HashMap(); } childObjectMap.put( requestKeyArray[2], map.get(requestKey)); childObjectMapMap.put( childObjectKey, childObjectMap ); } } Iterator childObjectItr = (new TreeSet(childObjectMapMap.keySet())).iterator(); this.rootMessageList = new Vector(); while( childObjectItr.hasNext() ) { BBPageMessageViewObject childObject = new BBPageMessageViewObject(); childObject.setPropertyRequestMap( (Map)childObjectMapMap.get(childObjectItr.next()) ); } this.rootMessageList.add( childObject ); BBPageMessageViewObject setPropertyRequestMap } メソッド // 選択メッセージ ID if(map.containsKey("selectedId")) { P88 参照 this.selectedId = ((String[])map.get("selectedId"))[0]; } } /** * チェックメソッドを呼び出します。 */ public boolean check(){ // エラー情報を初期化する clearErrorMessageMap(); // 題名(*)の必須チェック if( !InputCheck.isInput( this.messageSubject)) { setValid(false); addErrorMessage("messageSubject", "必須です"); 78 入力チェック メソッド 5 VIEW ジェネレータによる作成 } // 本文(*)の必須チェック if( !InputCheck.isInput( this.messageBody)) { setValid(false); addErrorMessage("messageBody", "必須です"); } // 名前(*)の必須チェック if( !InputCheck.isInput( this.userName)) { setValid(false); addErrorMessage("userName", "必須です"); } { // ルートメッセージ Iterator oItr = null; if( rootMessageList != null ) { oItr = rootMessageList.iterator(); } for( int i=0 ; oItr != null && oItr.hasNext() ; i++ ) { 入力チェック メソッド BBPageMessageViewObject childViewObject = (BBPageMessageViewObject)oItr.next(); if( !childViewObject.check() ) { setValid(false); Map childErrorMessageMap = childViewObject.getErrorMessageMap(); Iterator itr = childErrorMessageMap.keySet().iterator(); while( itr.hasNext() ) { String messageKey = (String)itr.next(); addErrorMessages("rootMessageList$" + i + "$" + messageKey, (String[])childErrorMessageMap.get(messageKey)); } } } } return isValid(); } } intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 79 (5) BBPageMessageViewObject.java javadoc より メソッドの概要 boolean check() チェックメソッドを呼び出します。 java.util.List getChildMessageList() 子メッセージを取得します。記事一覧取得の際に呼ばれます。 java.lang.String getMessageBody() 本文を取得します。 java.lang.String getMessageDate() 発信日時を取得します。 java.lang.String getMessageFlag() メッセージフラグを取得します。 java.lang.String getMessageId() メ ッ セ ー ジ ID を 取 得 し ま す 。 java.lang.String getMessageSubject() 題名を取得します。 java.lang.String getParentId() 親 メ ッ セ ー ジ ID を 取 得 し ま す 。 java.lang.String getPropertyName(java.lang.String tagName) プロパティ名に対応する日本語名称を返します。 java.lang.String getUserAge() 年齢を取得します。 java.lang.String getUserEmail() e-mail を 取 得 し ま す 。 java.lang.String getUserFeel() 気分を取得します。 java.lang.String getUserHpName() ホームページ名を取得します。 java.lang.String getUserHpUrl() ホ ー ム ペ ー ジ URL を 取 得 し ま す 。 java.lang.String getUserName() 名前を取得します。 java.lang.String getUserPassword() パスワードを取得します。 java.lang.String getUserSex() 性別を取得します。 void setChildMessageList(java.util.List list) 子 メ ッ セ ー ジ を 設 定 し ま す 。記 事 一 覧 の 取 得 の 際 に 親 メ ッ セ ー ジにセットします。 void setMessageBody(java.lang.String string) 本文をセットします。 void setMessageDate(java.lang.String string) 発信日時をセットします。 void setMessageFlag(java.lang.String string) メッセージフラグをセットします。 void setMessageId(java.lang.String string) メ ッ セ ー ジ ID を セ ッ ト し ま す 。 void setMessageSubject(java.lang.String string) 題名をセットします。 80 5 VIEW ジェネレータによる作成 void setParentId(java.lang.String string) 親 メ ッ セ ー ジ ID を セ ッ ト し ま す 。 void setPropertyRequestMap(java.util.Map map) リ ク エ ス ト パ ラ メ ー タ Map を ViewObject に と り こ み ま す 。 void setUserAge(java.lang.String string) 年齢をセットします。 void setUserEmail(java.lang.String string) e-mail を セ ッ ト し ま す 。 void setUserFeel(java.lang.String string) 気分をセットします。 void setUserHpName(java.lang.String string) ホームページ名をセットします。 void setUserHpUrl(java.lang.String string) ホ ー ム ペ ー ジ URL を セ ッ ト し ま す 。 void setUserName(java.lang.String string) 名前をセットします。 void setUserPassword(java.lang.String string) パスワードをセットします。 void setUserSex(java.lang.String string) 性別をセットします。 /* * BBPageListViewObject.java * * Created on 2003/08/15, 13:59 */ package imsg.sample.BBPage.view.object; import java.util.*; import jp.co.intra_mart.framework.tools.sourcegenerator.util.InputCheck; import jp.co.intra_mart.framework.tools.sourcegenerator.util.StringCompilation; import jp.co.intra_mart.framework.tools.sourcegenerator.view.ViewObject; import jp.co.intra_mart.framework.tools.sourcegenerator.view.ViewObjectIF; /** * BBPageMessageViewObject * @author - * @version 1.0 */ public class BBPageMessageViewObject extends ViewObject implements ViewObjectIF { /** メッセージ ID */ private String messageId; /** 親メッセージ ID */ private String parentId; /** 題名 */ private String messageSubject; intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 81 /** 発信日時 */ private String messageDate; /** 本文 */ private String messageBody; /** メッセージフラグ */ private String messageFlag; /** 名前 */ private String userName; /** パスワード */ private String userPassword; /** e-mail */ private String userEmail; /** ホームページ名 */ private String userHpName; /** ホームページ URL */ private String userHpUrl; /** 年齢 */ private String userAge; /** 性別 */ private String userSex; /** 気分 */ private String userFeel; /** 子メッセージ */ private List childMessageList; /** * インスタンスを生成します。 * */ public BBPageMessageViewObject() { super("BBPageList"); } /** * 指定の識別子を持つインスタンスを生成します。 * * @param name 識別子 */ public BBPageMessageViewObject(String name) { super(name); } /** * メッセージ ID を取得します。 82 5 VIEW ジェネレータによる作成 * * @return メッセージ ID */ public String getMessageId() { return messageId; } /** * 親メッセージ ID を取得します。 * * @return 親メッセージ ID */ public String getParentId() { return parentId; } /** * 題名を取得します。 * * @return 題名 */ public String getMessageSubject() { return messageSubject; } /** * 発信日時を取得します。 * プロパティ * @return 発信日時 */ 取得メソッド public String getMessageDate() { return messageDate; } /** * 本文を取得します。 * * @return 本文 */ public String getMessageBody() { return messageBody; } /** * メッセージフラグを取得します。 * * @return メッセージフラグ */ public String getMessageFlag() { return messageFlag; } /** * 名前を取得します。 * * @return 名前 */ public String getUserName() { return userName; intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 83 } /** * パスワードを取得します。 * * @return パスワード */ public String getUserPassword() { return userPassword; } /** * e-mail を取得します。 * * @return e-mail */ public String getUserEmail() { return userEmail; } /** * ホームページ名を取得します。 * * @return ホームページ名 */ public String getUserHpName() { return userHpName; } プロパティ 取得メソッド /** * ホームページ URL を取得します。 * * @return ホームページ URL */ public String getUserHpUrl() { return userHpUrl; } /** * 年齢を取得します。 * * @return 年齢 */ public String getUserAge() { return userAge; } /** * 性別を取得します。 * * @return 性別 */ public String getUserSex() { return userSex; } /** * 気分を取得します。 * 84 5 VIEW ジェネレータによる作成 * @return 気分 */ public String getUserFeel() { return userFeel; } プロパティ /** * 子メッセージを取得します。 取得メソッド * * @return 子メッセージ */ public List getChildMessageList() { return childMessageList; } /** * メッセージ ID を設定します。 * * @param string メッセージ ID */ public void setMessageId(String string) { messageId = string; } /** * 親メッセージ ID を設定します。 * * @param string 親メッセージ ID */ public void setParentId(String string) { parentId = string; } /** * 題名を設定します。 プロパティ * * @param string 題名 設定メソッド */ public void setMessageSubject(String string) { messageSubject = string; } /** * 発信日時を設定します。 * * @param string 発信日時 */ public void setMessageDate(String string) { messageDate = string; } /** * 本文を設定します。 * * @param string 本文 */ public void setMessageBody(String string) { messageBody = string; } intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 85 /** * メッセージフラグを設定します。 * * @param string メッセージフラグ */ public void setMessageFlag(String string) { messageFlag = string; } /** * 名前を設定します。 * * @param string 名前 */ public void setUserName(String string) { userName = string; } /** * パスワードを設定します。 * * @param string パスワード */ public void setUserPassword(String string) { userPassword = string; } /** * e-mail を設定します。 * * @param string e-mail */ public void setUserEmail(String string) { userEmail = string; } /** * ホームページ名を設定します。 * * @param string ホームページ名 */ public void setUserHpName(String string) { userHpName = string; } /** * ホームページ URL を設定します。 * * @param string ホームページ URL */ public void setUserHpUrl(String string) { userHpUrl = string; } /** * 年齢を設定します。 * * @param string 年齢 86 プロパティ 設定メソッド 5 VIEW ジェネレータによる作成 */ public void setUserAge(String string) { userAge = string; } /** * 性別を設定します。 * * @param string 性別 */ public void setUserSex(String string) { userSex = string; } プロパティ /** 設定メソッド * 気分を設定します。 * * @param string 気分 */ public void setUserFeel(String string) { userFeel = string; } /** * 子メッセージを設定します。 * * @param list 子メッセージ */ public void setChildMessageList(List list) { childMessageList = list; } /** * プロパティ名に対応する日本語名称を返します。 * * @param tagName HTML タグの name 属性 * @return name に対応する日本語名称 */ public String getPropertyName(String tagName) { String propertyName = null; if(tagName.equals("messageId")) propertyName = "メッセージ ID"; else if(tagName.equals("parentId")) propertyName = "親メッセージ ID"; else if(tagName.equals("messageSubject")) propertyName = "題名"; else if(tagName.equals("messageDate")) propertyName = "発信日時"; else if(tagName.equals("messageBody")) propertyName = "本文"; プロパティ名 else if(tagName.equals("messageFlag")) propertyName = "メッセージフラグ"; 取得メソッド else if(tagName.equals("userName")) propertyName = "名前"; else if(tagName.equals("userPassword")) propertyName = "パスワード"; else if(tagName.equals("userEmail")) propertyName = "e-mail"; else if(tagName.equals("userHpName")) propertyName = "ホームページ名"; else if(tagName.equals("userHpUrl")) propertyName = "ホームページ URL"; else if(tagName.equals("userAge")) propertyName = "年齢"; else if(tagName.equals("userSex")) propertyName = "性別"; else if(tagName.equals("userFeel")) propertyName = "気分"; return propertyName; } intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 87 /** * リクエストパラメータ Map を ViewObject にとりこみます。 * * @param map key:プロパティ名(String) value:値(String or String[] or ViewObject) */ public void setPropertyRequestMap(Map map) { // メッセージ ID if(map.containsKey("messageId")) { this.messageId = ((String[])map.get("messageId"))[0]; } // 親メッセージ ID if(map.containsKey("parentId")) { this.parentId = ((String[])map.get("parentId"))[0]; } // 題名 if(map.containsKey("messageSubject")) { this.messageSubject = ((String[])map.get("messageSubject"))[0]; } // 発信日時 if(map.containsKey("messageDate")) { this.messageDate = ((String[])map.get("messageDate"))[0]; } // 本文 if(map.containsKey("messageBody")) { this.messageBody = ((String[])map.get("messageBody"))[0]; Map を } // メッセージフラグ if(map.containsKey("messageFlag")) { this.messageFlag = ((String[])map.get("messageFlag"))[0]; } // 名前 if(map.containsKey("userName")) { this.userName = ((String[])map.get("userName"))[0]; } // パスワード if(map.containsKey("userPassword")) { this.userPassword = ((String[])map.get("userPassword"))[0]; } // e-mail if(map.containsKey("userEmail")) { this.userEmail = ((String[])map.get("userEmail"))[0]; } // ホームページ名 if(map.containsKey("userHpName")) { this.userHpName = ((String[])map.get("userHpName"))[0]; } // ホームページ URL if(map.containsKey("userHpUrl")) { this.userHpUrl = ((String[])map.get("userHpUrl"))[0]; 88 ViewObject に セットする メソッド 5 VIEW ジェネレータによる作成 } // 年齢 if(map.containsKey("userAge")) { this.userAge = ((String[])map.get("userAge"))[0]; } // 性別 if(map.containsKey("userSex")) { this.userSex = ((String[])map.get("userSex"))[0]; } // 気分 if(map.containsKey("userFeel")) { this.userFeel = ((String[])map.get("userFeel"))[0]; Map を } ViewObject に セットする { メソッド // 子メッセージ Iterator requestItr = map.keySet().iterator(); Map childObjectMapMap = new HashMap(); // while( requestItr.hasNext() ) { String requestKey = (String)requestItr.next(); String[] requestKeyArray = StringCompilation.split(requestKey, "$", 3); Map childObjectMap; // キーの先頭が childMessageList であるとき if( requestKeyArray[0].equals("childMessageList") && requestKeyArray.length == 3 ) { Integer childObjectKey = Integer.valueOf(requestKeyArray[1]); if( childObjectMapMap.containsKey( childObjectKey ) ) { マップに put す る childObjectMap = (Map)childObjectMapMap.get( childObjectKey ); } else { childObjectMap = new HashMap(); } childObjectMap.put( requestKeyArray[2], map.get(requestKey)); childObjectMapMap.put( childObjectKey, childObjectMap ); } } Iterator childObjectItr = (new TreeSet(childObjectMapMap.keySet())).iterator(); this.childMessageList = new Vector(); while( childObjectItr.hasNext() ) { BBPageMessageViewObject childObject = new BBPageMessageViewObject(); childObject.setPropertyRequestMap( (Map)childObjectMapMap.get(childObjectItr.next()) ); this.childMessageList.add( childObject ); } } BBPageMessageViewObject setPropertyRequestMap } メソッド P88 /** * 参照 チェックメソッドを呼び出します。 */ intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 89 public boolean check(){ // エラー情報を初期化する clearErrorMessageMap(); { // 子メッセージ Iterator oItr = null; if( childMessageList != null ) { oItr = childMessageList.iterator(); } for( int i=0 ; oItr != null && oItr.hasNext() ; i++ ) { BBPageMessageViewObject childViewObject = (BBPageMessageViewObject)oItr.next(); if( !childViewObject.check() ) { setValid(false); Map childErrorMessageMap = childViewObject.getErrorMessageMap(); Iterator itr = childErrorMessageMap.keySet().iterator(); while( itr.hasNext() ) { String messageKey = (String)itr.next(); addErrorMessages("childMessageList$" + i + "$" + messageKey, (String[])childErrorMessageMap.get(messageKey)); } } } } return isValid(); } } 90 入力チェック メソッド 5 VIEW ジェネレータによる作成 (6) package_mapping_BBPageList.txt ===BEGIN(BBPageListViewObject)=========================================================== MODEL----->VIEW ///////////////////////////////////////////////////////////////////// //** <モデルオブジェクトからマッピングを作成> //** //** **// ModelObject から取得した値を強制的に ViewObject の項目型に //** //** キャストしています。 ModelObject と ViewObject の項目間でデータが異なる場合には //** **// 修正が必要です。 //** **// **// **// **// **// ///////////////////////////////////////////////////////////////////// private Map createBBPageListViewObjectMap(BBMessageModelObject model1){ Hashtable hash = new Hashtable(); hash.put("messageId", (String)model1.getMessageId()); hash.put("parentId", (String)model1.getParentId()); hash.put("messageSubject", (String)model1.getMessageSubject()); hash.put("messageDate", (Date)model1.getMessageDate()); hash.put("messageBody", (String)model1.getMessageBody()); hash.put("messageFlag", (String)model1.getMessageFlag()); hash.put("userName", (String)model1.getUserName()); hash.put("userPassword", (String)model1.getUserPassword()); hash.put("userEmail", (String)model1.getUserEmail()); hash.put("userHpName", (String)model1.getUserHpName()); hash.put("userHpUrl", (String)model1.getUserHpUrl()); hash.put("userAge", (String)model1.getUserAge()); hash.put("userSex", (String)model1.getUserSex()); hash.put("userFeel", (String[])model1.getUserFeel()); return hash; } VIEW----->MODEL ///////////////////////////////////////////////////////////////////// //** 画面ブジェクトから MODEL マッピングを作成 //** //** //** **// **// ModelObject と ViewObject の項目間でデータが異なる場合には 修正が必要です。 //** **// **// **// ///////////////////////////////////////////////////////////////////// private void setBBMessageModelObjectValue(BBMessageModelObject modelobj,BBPageListViewObject viewobj){ modelobj.setMessageId(viewobj.getMessageId()); modelobj.setParentId(viewobj.getParentId()); modelobj.setMessageSubject(viewobj.getMessageSubject()); modelobj.setMessageDate(viewobj.getMessageDate()); modelobj.setMessageBody(viewobj.getMessageBody()); modelobj.setMessageFlag(viewobj.getMessageFlag()); modelobj.setUserName(viewobj.getUserName()); modelobj.setUserPassword(viewobj.getUserPassword()); modelobj.setUserEmail(viewobj.getUserEmail()); modelobj.setUserHpName(viewobj.getUserHpName()); modelobj.setUserHpUrl(viewobj.getUserHpUrl()); modelobj.setUserAge(viewobj.getUserAge()); modelobj.setUserSex(viewobj.getUserSex()); modelobj.setUserFeel(viewobj.getUserFeel()); } ===END(BBPageListViewObject)============================================================= intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 91 (7) package_mapping_BBPageMessageViewObject.txt ===BEGIN(BBPageMessageViewObject)=========================================================== MODEL----->VIEW ///////////////////////////////////////////////////////////////////// //** <モデルオブジェクトからマッピングを作成> //** //** **// ModelObject から取得した値を強制的に ViewObject の項目型に //** //** キャストしています。 ModelObject と ViewObject の項目間でデータが異なる場合には //** **// 修正が必要です。 //** **// **// **// **// **// ///////////////////////////////////////////////////////////////////// private Map createBBPageMessageViewObjectMap(){ Hashtable hash = new Hashtable(); return hash; } VIEW----->MODEL ///////////////////////////////////////////////////////////////////// //** 画面ブジェクトから MODEL マッピングを作成 //** //** //** **// **// ModelObject と ViewObject の項目間でデータが異なる場合には 修正が必要です。 //** **// **// **// ///////////////////////////////////////////////////////////////////// ===END(BBPageMessageViewObject)============================================================= (8) ServiceConfig_BBPage.properties #Start BBPageListViewObject #---------------------------------------# デフォルト設定 controller.class.BBPageListDefault=imsg.sample.BBPage.controller.service.BBPageListServiceController nextpage.path.BBPageListDefault=/imsg/sample/BBPage/jsp/BBPageList.jsp # 投稿 controller.class.entry= nextpage.path.entry= # 返信 controller.class.reply= nextpage.path.reply= # 削除 controller.class.erase= nextpage.path.erase= #End #---------------------------------------- 92 6 6 コンパイル及び実行 コンパイル及び実行 ソースコ ー ドジェネ レ ータで生 成 したソー ス コードは 、このまま で コンパイ ル 、実行でき ます。 ここでは e ビルダー に インポー ト してコン パ イル、実 行 を行いま す 。 プロジェクトの作成 (1) ソースジェネレータ Web プロジェクト Framework Producer を起 動 し て メ ニ ュ ー の 「 フ ァ イ ル 」 - 「 新 規 」 - 「 プ ロ ジ ェ ク ト」 を選択し ま す。こ こで 表示され る「新規 プロ ジェクト 」ダイアロ グ で「intra-mart」―「ソ ースジェ ネ レータ Web プロジェ ク ト」を選 択 して「次 へ 」ボタン を 押します 。 (2) ソースジェネレータの設定 プ ロ ジ ェ ク ト 名 (任 意 )、 コ ン テ キ ス ト パ ス (既 定 値 :webapp)を 設 定 す る と 、 次 に ソ ー ス ジ ェネレー タ の設定ダ イ アログが 表 示されま す 。ここで設 定する各 フ ォルダは ソ ースジェネ レータの 出 力先を選 択 して下さ い 。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 93 • コンテンツ ファイル フォルダ VIEW シートの生成フ ァ イル出力 先 の「jsp ファイル出 力 先」を追 加 します。 • JAVA ファイル フォルダ VIEW シートの生成フ ァ イル出力 先 の「src ファイル出 力 先」と DAO シートの「ModelObject、DAO、DAOIF ファイル出力 先 」を追加 し ます。 • プロパティ ファイル フォルダ VIEW シートの生成フ ァ イル出力 先 の「properties ファイル出力先 」 と DAO シートの「DataConfig ファイル出力先 」 を追加し ま す。 (3) 新しいサービスの作成 必要であ れ ば Java 設定を行って 「 終了」ボ タ ンを押す と プロジェ ク トが作成 さ れます。 このとき 、「xxx サ ービスが 存 在しませ ん 。新しい サ ービスを 作 成します か ?」の問に は「はい 」 と答えま す 。 これでプ ロ ジェクト が 作成され ま す。 プロジェ ク トが作成 さ れると、エ ディタ画 面 にサービ ス フレーム ワ ークとデ ー タフレーム ワークが 作 成されま す 。(各コ ン ポーネン ト の配置を 整 理した状 態 ) あとは Framework Producer 上でコンパイル 、 実行など を 行うこと が できます 。 94 6 コンパイル及び実行 ソースの実行 Framework Prodeucer のサーバ上 で 実行し、 デ バッグす る ことが可 能 です。 自動生成 さ れたソー ス の JSP 画面を表示さ せ ることが で きます。 デバッグ サ ーバを起 動 させ、メ ニ ューに掲 示 板を登録 し ます。(設定 例) ページ URL の sample の部分はプ ロ ジェクト 名 です。適 宜 変更して 下 さい。 掲示板アプリケーションの動作画面 画面上の 「BBPageListServiceController を呼び出す」ボ タ ンだけ動 作 します。 ボタンの 下 に赤字で 表 示されて い るのが入 力 チェック エ ラーメッ セ ージです 。 題名、名 前 、本文に 何 かを入力 し 、上記ボ タ ンを押す と サーバサ イ ドで入力 チ ェックが 行われ、 入 力チェッ ク エラーメ ッ セージが 消 えます。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 95 96 7 7 ソースコードの追加、変更 ソースコードの追加、変更 自動生成したソースコードに追加、変更を行ってアプリケーションとして完成させます。 • DAO 追加メソッドの実装 • マッピングクラスの追加 • イベントフレームワークの追加 • アクション別 ServiceController の追加 • 画面レイアウトの変更(JSP の変更) • プロパティファイルの変更 自動生成 し たファイ ル を直接変 更 後、ジェネ レータを 再 実行する と 変更した フ ァイルが上 書きされ変更内容が失われてしまいますのでここではできるだけ自動生成ファイルの行 わない方 法 をとりま す 。 クラスフ ァ イルの場 合 は、自動生 成された ク ラスのサ ブ クラスを 作 成して必 要 な変更を加 えます。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 97 DAO 追 加 メ ソ ッ ド の 実 装 MessageDAO.java の作成 -------------------------------------------------自 動 生 成 さ れ た BBMessageDAO.java に は 追 加 メ ソ ッ ド シ ー ト で 記 述 し た メ ソ ッ ド の ソ ー スコード 実 装が含ま れ ていませ ん 。 BBMessageDAO クラスを 継承した BBMessage クラスを作 成 して追加 メ ソッドを オ ーバライ ドしてロ ジ ックを追 加 実装しま す 。 FrameworkProducer で は 、 エ デ ィ タ 画 面 の プ ロ ジ ェ ク ト ツ リ ー からデー タ フレーム ワ ークの BBMessage を選択します 。 右側の編 集 画面から D AOを選 択 します。 また、プ ロ パティ画 面 から「DAO クラス名 」の項目を 選 択し、右 側 のボタン を クリックし ます。 表示され た ダイアロ グ から「新 規 にクラス を 作成」を 選 択し、O K ボタンを ク リックしま す。 クラス作 成 ウィザー ド で パッケー ジ 名:imsg.sample.BBPage.model.data クラス名 :MessageDAO スーパー ク ラス:imsg.sample.BBPage.model.data.BBMessageDAO を設定し て 、新規に ク ラスを作 成 します。 作成後 、プロ パティ画 面 の「DAO クラス名」が imsg.sample.BBPage.model.data. MessageDAO になって い ることを 確 認してく だ さい。 98 7 ソースコードの追加、変更 をダブル ク リックし て 、作成さ れ たクラス を 以下のよ う に編集し ま す。 /* * MessageDAO.java */ package imsg.sample.BBPage.model.data; import imsg.sample.BBPage.model.object.BBMessageModelObject; import java.math.BigDecimal; import java.util.Hashtable; import java.util.List; import jp.co.intra_mart.foundation.database.DbsConnection; import jp.co.intra_mart.framework.base.data.DataAccessException; import jp.co.intra_mart.framework.base.data.DataConnectException; import jp.co.intra_mart.framework.base.data.DataPropertyException; /** * */ public class MessageDAO extends BBMessageDAO { /** * 現在登録されているメッセージのうち最大の MessageId を返します。<BR> * * @return BigDecimal 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public double getMaxMessageId() throws DataConnectException, DataAccessException, DataPropertyException { //各変数の初期化 DbsConnection conn = null; String sql = ""; List list = null; Hashtable hash = null; double result = 0; //DbsConnection の取得 conn = getConnection(); //sql の作成 sql = "SELECT MAX(MESSAGEID) AS messageid FROM BBMESSAGE"; //select 処理 try{ long before = System.currentTimeMillis(); list = conn.select(sql); double time = ((double)(System.currentTimeMillis() - before))/1000.0; }catch(Exception ex){ throw new DataAccessException(ex.getMessage(),ex); } //DB から取得できたかをチェック intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 99 //取得できなかったときは null を返す try{ hash = (Hashtable)list.get(0); }catch(IndexOutOfBoundsException ex){ return result; } if(hash.containsKey("messageid")){ result = ((Double)hash.get("messageid")).doubleValue(); } return result; } /** * ID を自動生成し、新規メッセージを登録します。<BR> * * @param modelObj BBMessageModelObject 型 * @return BigDecimal 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public double entry(BBMessageModelObject modelObj) throws DataConnectException, DataAccessException, DataPropertyException { double entryId = getMaxMessageId() + 1; BBMessageModelObject のメソッド modelObj.setMessageId( new BigDecimal(entryId) ); P39 insert( modelObj ); return entryId; } 参照 BBMessageDAO の メソッド P23 参照 /** * ルートメッセージのリストを取得します。<BR> * * @return List 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 BBMessageDAO の メソッド P21 */ 参照 public List getRootMessages() throws DataConnectException, DataAccessException, DataPropertyException { return createListByWhere("MESSAGEFLAG = '1' AND PARENTID IS NULL"); } /** * 指定 ID のルートメッセージリストを取得します。<BR> * * @return List 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ 100 BBMessageDAO の メソッド P21 参照 7 ソースコードの追加、変更 public List getRootMessages(Number rootMessageId) throws DataConnectException, DataAccessException, DataPropertyException { return createListByWhere("MESSAGEID = " + rootMessageId + " AND MESSAGEFLAG = '1' AND PARENTID IS NULL"); } /** * 指定ルートメッセージの子メッセージのリストを取得します。<BR> * * @param rooMessageId Number 型 * @return List 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 BBMessageDAO の メソッド P21 */ 参照 public List getChildMessages(Number rootMessageId) throws DataConnectException, DataAccessException, DataPropertyException { return createListByWhere("MESSAGEFLAG = '1' AND PARENTID = " + rootMessageId ); } /** * 指定 ID を持つメッセージを削除(フラグセット)します。<BR> * * @param messageId Number 型 * @return void 型の値 * @throws DataConnectException データ接続に関連する例外が発生 * @throws DataAccessException データアクセス時の例外が発生 * @throws DataPropertyException データプロパティ取得時の例外が発生 */ public void eraseMessage(Number messageId) throws DataConnectException, DataAccessException, DataPropertyException { BBMessageModelObject modelObject = new BBMessageModelObject(); // ModelObject に削除情報を設定 modelObject.setMessageId((BigDecimal)messageId); // メッセージ ID modelObject.setMessageFlag("0"); // Update を実行 update(modelObject); } // 削除フラグ BBMessageDAO の メソッド P24 参照 } intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 101 マッピングクラスの追加 自動生成 さ れた package_mapping ファイル を 元に ViewObject と ModelObject を相互変換 するマッ ピ ングクラ ス を作成し ま す。 package_mapping 内のソースコー ド は View―Model 間の型変換を全 く 行ってい な いため 、 型に合わ せ て修正す る 必要があ り ます。 javadoc より メソッドの概要 static BBMessageModelOb getBBMessageModelObject(BBPageListViewObject viewobj) ject BBPageInputViewObject → BBMessageModelObject static BBPageMessageVie getBBPageMessageViewObject(BBMessageModelObject modelObj) wObject BBMessageModelObject → BBPageMessageViewObject FrameworkProducer では、「 ファ イル」-「新 規」-「 その 他」を 選択 し、選 択ダ イアログ から「ク ラ ス」を選 択 します。 クラス作 成 ウィザー ド で パッケー ジ 名:imsg.sample.BBPage.model.object クラス名 :BBMessageMapping を設定し て 、新規に ク ラスを作 成 します。 作成され た クラスを 以 下のよう に 編集しま す 。 102 7 ソースコードの追加、変更 なお、参 考 にする package_mapping ファイル は、パッ ケ ージエク ス プローラの src フォル ダの直下 に ある package_mapping_BBPageMessageViewObject.txt package_mapping_BBPageList.txt です。 マッピングクラス BBMessageMapping.java --------------------------------/* * Created on 2003/07/31 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */ package imsg.sample.BBPage.model.object; import imsg.sample.BBPage.view.object.BBPageListViewObject; import imsg.sample.BBPage.view.object.BBPageMessageViewObject; /** * @author shimodaira * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ public class BBMessageMapping { /** * BBPageInputViewObject → BBMessageModelPbject * * @param viewobj * @return */ public static BBMessageModelObject getBBMessageModelObject(BBPageListViewObject viewobj) { BBMessageModelObject modelobj = new BBMessageModelObject(); modelobj.setMessageId(viewobj.getMessageId()); modelobj.setParentId(viewobj.getParentId()); modelobj.setMessageSubject(viewobj.getMessageSubject()); modelobj.setMessageDate(viewobj.getMessageDate()); modelobj.setMessageBody(viewobj.getMessageBody()); modelobj.setMessageFlag(viewobj.getMessageFlag()); ViewObject か ら ModelObject へ の マッピング modelobj.setUserName(viewobj.getUserName()); modelobj.setUserPassword(viewobj.getUserPassword()); modelobj.setUserEmail(viewobj.getUserEmail()); modelobj.setUserHpName(viewobj.getUserHpName()); modelobj.setUserHpUrl(viewobj.getUserHpUrl()); modelobj.setUserAge(viewobj.getUserAge()); modelobj.setUserSex(viewobj.getUserSex()); // View 側が String 配列で単一選択の場合 if( viewobj.getUserFeel() != null) { modelobj.setUserFeel(viewobj.getUserFeel()[0]); ViewObject か ら ModelObject へ の マッピング } else { modelobj.setUserFeel(null); } intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 103 return modelobj; } /** * BBMessageModelObject → BBPageMessageViewObject * * @param viewobj * @return */ public static BBPageMessageViewObject getBBPageMessageViewObject(BBMessageModelObject modelObj) { BBPageMessageViewObject viewObj = new BBPageMessageViewObject(); if(modelObj.getMessageId() != null) { viewObj.setMessageId(modelObj.getMessageId().toString()); } else { viewObj.setMessageId(null); } if(modelObj.getParentId() != null) { viewObj.setParentId(modelObj.getParentId().toString()); } else { viewObj.setParentId(null); } viewObj.setMessageSubject(modelObj.getMessageSubject()); if(modelObj.getMessageDate() != null) { viewObj.setMessageDate(modelObj.getMessageDate().toString()); } else { viewObj.setMessageDate(null); } ModelObject か ら ViewObject へ の マッピング viewObj.setMessageBody(modelObj.getMessageBody()); viewObj.setMessageFlag(modelObj.getMessageFlag()); viewObj.setUserName(modelObj.getUserName()); viewObj.setUserPassword(modelObj.getUserPassword()); viewObj.setUserEmail(modelObj.getUserEmail()); viewObj.setUserHpName(modelObj.getUserHpName()); viewObj.setUserHpUrl(modelObj.getUserHpUrl()); if(modelObj.getUserAge() != null) { viewObj.setUserAge(modelObj.getUserAge().toString()); } else { viewObj.setUserAge(null); } viewObj.setUserSex(modelObj.getUserSex()); viewObj.setUserFeel(modelObj.getUserFeel()); return viewObj; } } 104 ModelObject か ら ViewObject へ の マッピング 7 ソースコードの追加、変更 イベントフレームワークの追加 ソースコ ー ドジェネ レ ータと J2EE フレーム ワ ークの対 応 は次のよ う になって い ます。 イベント フ レームワ ー クは自動 生 成されな い ため、ソ ー スコード を 追加しま す 。 • サービスフレームワーク → VIEW ジェネレータ • イベントフレームワーク • データフレームワーク → DAO ジェネレータ 掲示板ア プ リケーシ ョ ンでは次 の イベント を 追加とし て 次の機能 を 追加しま す 。 • 記事一覧の取得 CreateMessageListEvent/CreateMessageListListener/CreateMessageListEventResult • 記事の登録 EntryMessageEvent/EntryMessageEventListener/EntryMessageEventResult • 記事の削除 EraseMessageEvent/EraseMessageEventListener/EraseMesageEventResult intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 105 記事一覧の取得 CreateMessageList イベント ------------------------------DAO を利用してデー タ ベースか ら 記事を読 み 込み記事 の 一覧を作 成 します。 記事一覧 は 画面オブ ジ ェクト(BBMessageViewObject クラス)のリストと して返却 さ れます 。 FrameworkProducer では、「BBPage」の右クリ ックメニ ュ ーから「イ ベントフ レ ームワー ク 作成ウィ ザ ード」を選 択 します。 「イベン ト フレーム ワ ーク作成 ウ ィザード 」 で イベント ID:CreateMessageList イベント フ ァクトリ : スタンダ ー ドイベン ト ファクト リ イベント ク ラス名: 「 新規のク ラ スを作成 」 で作成し ま す。 パッケー ジ 名:imsg.sample.BBPage.model.event クラス名 :CreateMessageListEvent イベント 処 理結果ク ラ ス名:「 新 規のクラ ス を作成」 で 作成しま す 。 パッケー ジ 名:imsg.sample.BBPage.model.event クラス名 :CreateMessageListEventResult 「次へ」 を クリック し ます。 イベント リ スナクラ ス 名:「新 規 のクラス を 作成」で 作 成します 。 パッケー ジ 名:imsg.sample.BBPage.model.event クラス名 :CreateMessageEventListener 「終了」 を クリック し ます。 エディタ 画 面のツリ ー にイベン ト フレーム ワ ーク(CreateMessageList)が作成され ます。 106 7 ソースコードの追加、変更 をダブル ク リックし て 、CreateMessageListEvent.java ファイルを 編 集します 。 (1) CreateMessageListEvent.java /* * CreatMessageListEvent.java */ package imsg.sample.BBPage.model.event; import jp.co.intra_mart.framework.base.event.Event; /** * メッセージリスト作成イベントを起動する情報です。 * * @author name * @version 1.0 */ public class CreateMessageListEvent extends Event { private Number messageId; /** * CreateMessageListEvent を新規に生成します。 */ public CreateMessageListEvent() { super(); // 属性の初期化 setMessageId(null); } /** * メッセージ ID を取得します。 * * @return メッセージ ID */ public Number getMessageId() { return messageId; } /** * メッセージ ID を設定します。 * * @param メッセージ ID */ public void setMessageId(Number number) { messageId = number; } } intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 107 をダブルクリックして CreateMessageEventListener.java を編集します。 (2) CreateMessageEventListener.java /* * CreateMessageEventListener.java */ package imsg.sample.BBPage.model.event; import imsg.sample.BBPage.model.data.BBMessageDAOIF; import imsg.sample.BBPage.model.object.BBMessageMapping; import imsg.sample.BBPage.model.object.BBMessageModelObject; import imsg.sample.BBPage.view.object.BBPageMessageViewObject; import java.util.Iterator; import java.util.List; import java.util.Vector; import jp.co.intra_mart.framework.base.event.Event; import jp.co.intra_mart.framework.base.event.EventResult; import jp.co.intra_mart.framework.base.event.StandardEventListener; import jp.co.intra_mart.framework.system.exception.ApplicationException; import jp.co.intra_mart.framework.system.exception.SystemException; /** * メッセージリスト作成イベントの処理を行います。 * * @author name * @version 1.0 */ public class CreateMessageListEventListener extends StandardEventListener { /** * メッセージリスト作成イベントに対する処理です。 * * @param event イベント * @return イベント処理結果 * @throws SystemException システム例外が発生 * @throws ApplicationException アプリケーション例外が発生 */ protected EventResult fire(Event event) throws SystemException, ApplicationException { CreateMessageListEvent listEvent = null; CreateMessageListEventResult listResult = null; BBMessageDAOIF dao = null; List rootMessageList = null; List rootViewList = null; Iterator rootItr = null; // イベントのキャスト listEvent = (CreateMessageListEvent)event; // DAO の取得 dao = (BBMessageDAOIF)getDAO("BBPage", "BBMessage", listEvent.getLoginGroupID()); // ルートメッセージの読み出し if( listEvent.getMessageId() != null ) { 108 7 ソースコードの追加、変更 // 返信時、特定のルートメッセージを取得 rootMessageList = dao.getRootMessages( listEvent.getMessageId() ); } else { // 通常時、すべてのルートメッセージを取得 rootMessageList = dao.getRootMessages(); } if(rootMessageList != null) { rootViewList = new Vector(); rootItr = rootMessageList.iterator(); } // ルートメッセージ数だけループ while( rootItr != null && rootItr.hasNext() ) { List childViewList = null; Iterator childItr = null; // ルートメッセージを ModelObject から ViewObject に変換 BBMessageModelObject rootModelObject = (BBMessageModelObject)rootItr.next(); BBPageMessageViewObject rootViewObject = BBMessageMapping.getBBPageMessageViewObject( rootModelObject ); // ルートメッセージを親に持つ、子メッセージリストを取得 List childMessageList = dao.getChildMessages( rootModelObject.getMessageId() ); if(childMessageList != null) { childViewList = new Vector(); childItr = childMessageList.iterator(); マッピングクラス BBMessageMapping を利用し、 } ModelObject か ら // 子メッセージ数だけループ while( childItr != null && childItr.hasNext() ) { ViewObject へ 変 換 // 子 ModelObject を ViewObject に変換して子メッセージをリストに追加 BBPageMessageViewObject childViewObject = BBMessageMapping.getBBPageMessageViewObject( (BBMessageModelObject)childItr.next()); childViewList.add(childViewObject); } // 親メッセージに子メッセージリストを格納し、親メッセージを親メッセージリストに格納 rootViewObject.setChildMessageList( childViewList ); rootViewList.add( rootViewObject ); } // イベント処理結果の生成 listResult = new CreateMessageListEventResult(); listResult.setRootMessageList( rootViewList ); // イベント処理結果 return listResult; } } intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 109 イベント フ ァクトリ の 右クリッ ク メニュー か ら「イベ ン ト処理結 果 クラスの 編 集」を選択 し、CreateMessageListEventResult.java の編集をします 。 (3) CreateMessageListEventResult.java /* * CreateMessageListEventResult.java */ package imsg.sample.BBPage.model.event; import java.util.List; import jp.co.intra_mart.framework.base.event.EventResult; /** * メッセージリスト作成イベントの処理結果です。 * * @author name * @version 1.0 */ public class CreateMessageListEventResult implements EventResult { /** * ルートメッセージのリスト */ private List rootMessageList; /** * CreateMessageListEventResult を新規に生成します。 */ public CreateMessageListEventResult() { super(); // 属性の初期化 setRootMessageList(null); } /** * ルートメッセージリストを取得します。 * * @return ルートメッセージリスト */ public List getRootMessageList() { return rootMessageList; } /** 110 7 ソースコードの追加、変更 * ルートメッセージリストを設定します。 * * @param ルートメッセージリスト */ public void setRootMessageList(List list) { rootMessageList = list; } } intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 111 記事一覧の登録 EntryMessage イベント -----------------------------------入力フォ ー ムで入力 さ れた情報 を 渡し、DAO を利用し て データベ ー スに記事 レ コードを追 加します 。 FrameworkProducer では、「CreateMessageList イベント 」の場合と 同 様な操作 を 行って、 各ファイ ル を編集し ま す。 イベント I Dは EntryMessage となります。 (1) EntryMessageEvent.java /* * EntryEvent.java */ package imsg.sample.BBPage.model.event; import imsg.sample.BBPage.view.object.BBPageListViewObject; import jp.co.intra_mart.framework.base.event.Event; /** * メッセージ登録イベントを起動する情報です。 * * @author name * @version 1.0 */ public class EntryMessageEvent extends Event { /** * 単一の BBPageListViewObject */ private BBPageListViewObject viewObject; /** * EntryEvent を新規に生成します。 */ public EntryMessageEvent() { super(); // 属性の初期化 setViewObject(null); } /** * ViewObject を取得します。 * * @return ViewObject */ public BBPageListViewObject getViewObject() { return viewObject; } /** * ViewObject を設定します。 * 112 7 ソースコードの追加、変更 * @param ViewObject */ public void setViewObject(BBPageListViewObject object) { viewObject = object; } } (2) EntryMessageEventListenter.java /* * EntryMessageEventListener.java */ package imsg.sample.BBPage.model.event; import imsg.sample.BBPage.model.data.BBMessageDAOIF; import imsg.sample.BBPage.model.object.BBMessageMapping; import imsg.sample.BBPage.model.object.BBMessageModelObject; import java.util.Date; import jp.co.intra_mart.framework.base.event.Event; import jp.co.intra_mart.framework.base.event.EventResult; import jp.co.intra_mart.framework.base.event.StandardEventListener; import jp.co.intra_mart.framework.system.exception.ApplicationException; import jp.co.intra_mart.framework.system.exception.SystemException; /** * メッセージ登録イベントの処理を行います。 * * @author name * @version 1.0 */ public class EntryMessageEventListener extends StandardEventListener { /** * メッセージ登録イベントに対する処理です。 * * @param event イベント * @return イベント処理結果 * @throws SystemException システム例外が発生 * @throws ApplicationException アプリケーション例外が発生 */ protected EventResult fire(Event event) throws SystemException, ApplicationException { EntryMessageEvent entryEvent = null; EntryMessageEventResult entryResult = null; BBMessageDAOIF dao = null; BBMessageModelObject modelObject = null; // イベントのキャスト entryEvent = (EntryMessageEvent)event; // DAO の取得 dao = (BBMessageDAOIF)getDAO("BBPage", "BBMessage", entryEvent.getLoginGroupID()); // マッピング modelObject = BBMessageMapping.getBBMessageModelObject( entryEvent.getViewObject() ); intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 113 // 既定値の設定 modelObject.setMessageDate( new Date() ); modelObject.setMessageFlag( "1" ); // システム日付を設定 // 1:通常 0:削除済 // データ登録 dao.entry( modelObject ); // イベント処理結果の生成 entryResult = new EntryMessageEventResult(); entryResult.setModelObject( modelObject ); マッピングクラス BBMessageMapping を利用し、 ViewObject か ら ModelObject へ 変 換 // イベント処理結果 return entryResult; } } (3) EntryMessageEventResult.java /* * EntryMessageEventResult.java */ package imsg.sample.BBPage.model.event; import imsg.sample.BBPage.model.object.BBMessageModelObject; import jp.co.intra_mart.framework.base.event.EventResult; /** * メッセージ登録イベントの処理結果です。 * * @author name * @version 1.0 */ public class EntryMessageEventResult implements EventResult { /** * 単一の BBMessageModelObject */ private BBMessageModelObject modelObject; /** * EntryMessageEventResult を新規に生成します。 */ public EntryMessageEventResult() { super(); // 属性の初期化 setModelObject(null); } /** * ModelObject を取得します。 * * @return ModelObject */ public BBMessageModelObject getModelObject() { 114 7 ソースコードの追加、変更 return modelObject; } /** * ModelObject を設定します。 * * @param ModelObject */ public void setModelObject(BBMessageModelObject object) { modelObject = object; } } intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 115 記事一覧の削除 EraseMessage イベント -----------------------------------DAO を利用してデー タ ベースの 記 事レコー ド に削除フ ラ グをセッ ト します。 FrameworkProducer では、「CreateMessageList イベント 」の場合と 同 様な操作 を 行って、 各ファイ ル を編集し ま す。 イベント I Dは EraseMessage となります。 (1) EraseMessageEvent.java /* * EraseMessageEvent.java */ package imsg.sample.BBPage.model.event; import jp.co.intra_mart.framework.base.event.Event; /** * メッセージ削除イベントを起動する情報です。 * * @author name * @version 1.0 */ public class EraseMessageEvent extends Event { private Number messageId; /** * EraseMessageListEvent を新規に生成します。 */ public EraseMessageEvent() { super(); // 属性の初期化 setMessageId(null); } /** * メッセージ ID を取得します。 * * @return メッセージ ID */ public Number getMessageId() { return messageId; } /** * メッセージ ID を設定します。 * * @param メッセージ ID */ public void setMessageId(Number number) { messageId = number; } 116 7 ソースコードの追加、変更 } ・ (2) EraseMessageEventListenter.java /* * EraseMessageEventListener.java */ package imsg.sample.BBPage.model.event; import imsg.sample.BBPage.model.data.BBMessageDAOIF; import jp.co.intra_mart.framework.base.event.Event; import jp.co.intra_mart.framework.base.event.EventResult; import jp.co.intra_mart.framework.base.event.StandardEventListener; import jp.co.intra_mart.framework.system.exception.ApplicationException; import jp.co.intra_mart.framework.system.exception.SystemException; /** * メッセージ削除イベントの処理を行います。 * * @author name * @version 1.0 */ public class EraseMessageEventListener extends StandardEventListener { /** * メッセージ削除イベントに対する処理です。 * * @param event イベント * @return イベント処理結果 * @throws SystemException システム例外が発生 * @throws ApplicationException アプリケーション例外が発生 */ protected EventResult fire(Event event) throws SystemException, ApplicationException { EraseMessageEvent eraseEvent = null; EraseMessageEventResult eraseResult = null; BBMessageDAOIF dao = null; // イベントのキャスト eraseEvent = (EraseMessageEvent)event; // DAO の取得 dao = (BBMessageDAOIF)getDAO("BBPage", "BBMessage", eraseEvent.getLoginGroupID()); // 削除メソッドの呼び出し dao.eraseMessage(eraseEvent.getMessageId()); // イベント処理結果の生成 eraseResult = new EraseMessageEventResult(); // イベント処理結果 return eraseResult; } } intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 117 (3) EraseMessageEventResult.java /* * EraseMessageListEventResult.java */ package imsg.sample.BBPage.model.event; import jp.co.intra_mart.framework.base.event.EventResult; /** * メッセージ削除イベントの処理結果です。 * * @author name * @version 1.0 */ public class EraseMessageEventResult implements EventResult { /** * EraseMessageListEventResult を新規に生成します。 */ public EraseMessageEventResult() { super(); } } 118 7 ソースコードの追加、変更 ア ク シ ョ ン 別 ServiceController の 追 加 JSP の各アクション ボ タンに対 応 する ServiceController を追加し ます。 こ ち ら も 自 動 生 成 さ れ た BBPageListServiceController ク ラ ス を 継 承 し て 必 要 な 処 理 を 加えた新 し いクラス を 作成しま す 。 • 初期表示 StartMessageListServiceController • 一覧表示 CreateMessageListServiceController • 投稿(entry) EntryMessageServiceController • 返信(reply) CreateMessageListServiceController • 削除(erase) EraseMessageServiceController 初期表示 StartMessageListServiceController ----------------------------メニュー か ら最初に 呼 び出され 、初期化を 行 い、初期 画 面を表示 す るサービ ス コントロー ラです。 FrameworkProducer では、サービ ス (BBPageListService)を選択し ま す。 以下のよ う にプロパ テ ィを変更 し ます。 サービス ID、サービ ス 名:start コントロ ー ラクラス 名:右側のボ タ ンから「新 規 のクラス を 作成」を選 択 して作成 し ます。 パッケー ジ 名:imsg.sample.BBPage.controller.service クラス名 :StartMessageListServiceController スーパー ク ラス: imsg.sample.BBPage.controller.service.BBPageListServiceController StartMessageListServiceController.java を編集します 。 /* * StartServiceController.java */ package imsg.sample.BBPage.controller.service; import imsg.sample.BBPage.model.event.CreateMessageListEvent; import imsg.sample.BBPage.model.event.CreateMessageListEventResult; import imsg.sample.BBPage.view.object.BBPageListViewIdentifier; intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 119 import imsg.sample.BBPage.view.object.BBPageListViewObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import jp.co.intra_mart.framework.base.service.ServiceResult; import jp.co.intra_mart.framework.system.exception.ApplicationException; import jp.co.intra_mart.framework.system.exception.SystemException; /** * @author * @version 1.0 */ public class StartMessageServiceController extends BBPageListServiceController { public ServiceResult service() throws SystemException, ApplicationException { ViewObject を 一 意 に す る HttpServletRequest req = getRequest(); HttpSession session = req.getSession(); id を 取 得 String viewId = new BBPageListViewIdentifier().getId(); ServiceResult serviceResult = null; id か ら ViewObject を 取得 // ViewObject の取得 BBPageListViewObject viewObj = (BBPageListViewObject)session.getAttribute(viewId); ViewObject に viewObj.setMessageId(null); null を セ ッ ト viewObj.setParentId(null); viewObj.clearErrorMessageMap(); // メッセージ情報を題名、本文を画面より消去 ViewObject に viewObj.setParentId( null ); null を セ ッ ト viewObj.setMessageSubject( null ); viewObj.setMessageBody( null ); // メッセージリスト取得イベント { CreateMessageListEvent event = (CreateMessageListEvent)createEvent("BBPage", "CreateMessageList"); CreateMessageListEventResult result = (CreateMessageListEventResult)dispatchEvent(event); viewObj.setRootMessageList( result.getRootMessageList() ); } BBPageListViewObject の メ ソ ッ ド return serviceResult; } } 120 P75 参照 7 ソースコードの追加、変更 一覧表示、返信(reply) CreateMessageListServiceController --------------記事の一 覧 表示のデ ー タを用意 す るサービ ス コントロ ー ラです。 通常はす べ ての記事 を 、返信時 は 返信元の 記 事のみを 一 覧表示し ま す。 FrameworkProducer では、サービ ス (reply)を選択しま す 。 以下のよ う にプロパ テ ィを変更 し ます。 コントロ ー ラクラス 名:右側のボ タ ンから「新 規 のクラス を 作成」を選 択 して作成 し ます。 パッケー ジ 名:imsg.sample.BBPage.controller.service クラス名 :CreateMessageListServiceController スーパー ク ラス: imsg.sample.BBPage.controller.service.BBPageListServiceController サービス (reply)から遷移ペー ジ(BBPageList)に接続を 作 成します 。 CreateMessageListServiceController.java を編集します 。 /* * CreateMessageServiceController.java */ package imsg.sample.BBPage.controller.service; import imsg.sample.BBPage.model.event.CreateMessageListEvent; import imsg.sample.BBPage.model.event.CreateMessageListEventResult; import imsg.sample.BBPage.view.object.BBPageListViewIdentifier; import imsg.sample.BBPage.view.object.BBPageListViewObject; import java.math.BigDecimal; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import jp.co.intra_mart.framework.base.service.ServiceResult; import jp.co.intra_mart.framework.system.exception.ApplicationException; import jp.co.intra_mart.framework.system.exception.SystemException; /** * @author * @version 1.0 */ public class CreateMessageListServiceController extends BBPageListServiceController { public ServiceResult service() throws SystemException, ApplicationException { intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 121 HttpServletRequest req = getRequest(); HttpSession session = req.getSession(); String viewId = new BBPageListViewIdentifier().getId(); ViewObject を 一 意 に す る id を 取 得 // ViewObject の取得 BBPageListViewObject viewObj = (BBPageListViewObject)session.getAttribute(viewId); id か ら ViewObject を 取 得 // チェックのクリア viewObj.clearErrorMessageMap(); エラー情報をクリアするメソッド SourceGenerator パ ッ ケ ー ジ の ViewObject // メッセージリスト取得イベント ク ラ ス の clearErrorMessageMap メ ソ ッ ド CreateMessageListEvent event = (CreateMessageListEvent)createEvent("BBPage", "CreateMessageList"); if( viewObj.getParentId() != null && !viewObj.getParentId().equals("") ) { event.setMessageId( new BigDecimal(viewObj.getParentId()) ); } CreateMessageListEventResult result = (CreateMessageListEventResult)dispatchEvent(event); viewObj.setRootMessageList( result.getRootMessageList() ); BBPageListViewObject の メ ソ ッ ド ServiceResult serviceResult = null; return serviceResult; } } 122 P75 参照 7 ソースコードの追加、変更 投稿(entry) EntryMessageServiceController -----------------------------記事の新 規 投稿、返 信 投稿を行 う サービス コ ントロー ラ です。 FrameworkProducer では、サービ ス (entry)を選択しま す 。 以下のよ う にプロパ テ ィを変更 し ます。 コントロ ー ラクラス 名:右側のボ タ ンから「新 規 のクラス を 作成」を選 択 して作成 し ます。 パッケー ジ 名:imsg.sample.BBPage.controller.service クラス名 :EntryMessageServiceController スーパー ク ラス: imsg.sample.BBPage.controller.service.BBPageListServiceController サービス (entry)から遷移ペー ジ(BBPageList)に接続を 作 成します 。 EntryMessageServiceController.java を編集し ます。 /* * EntryMessageServiceController.java */ package imsg.sample.BBPage.controller.service; import imsg.sample.BBPage.model.event.CreateMessageListEvent; import imsg.sample.BBPage.model.event.CreateMessageListEventResult; import imsg.sample.BBPage.model.event.EntryMessageEvent; import imsg.sample.BBPage.model.event.EntryMessageEventResult; import imsg.sample.BBPage.view.object.BBPageListViewIdentifier; import imsg.sample.BBPage.view.object.BBPageListViewObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import jp.co.intra_mart.framework.base.service.ServiceResult; import jp.co.intra_mart.framework.system.exception.ApplicationException; import jp.co.intra_mart.framework.system.exception.SystemException; intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 123 /** * @author * @version 1.0 */ public class EntryMessageServiceController extends BBPageListServiceController { public ServiceResult service() throws SystemException, ApplicationException { HttpServletRequest req = getRequest(); HttpSession session = req.getSession(); String viewId = new BBPageListViewIdentifier().getId(); ServiceResult serviceResult = null; ViewObject を 一 意 に す る id を 取 得 // ViewObject の取得 BBPageListViewObject viewObj = (BBPageListViewObject)session.getAttribute(viewId); id か ら ViewObject を 取 得 // 必須項目が入力されていない場合は登録しない。 if( !viewObj.isValid() ) { return serviceResult; } // HP 名が空で URL が入っているときは URL を HP 名とする if( viewObj.getUserHpUrl() != null && !viewObj.getUserHpUrl().equals("")) { if( viewObj.getUserHpName() == null || viewObj.getUserHpName().equals("")) { viewObj.setUserHpName( viewObj.getUserHpUrl() ); } ViewObject に URL を セ ッ ト } // メッセージ登録イベント { EntryMessageEvent event = (EntryMessageEvent)createEvent("BBPage", "EntryMessage"); event.setViewObject( viewObj ); EntryMessageEventResult result = (EntryMessageEventResult)dispatchEvent(event); } // 登録済のメッセージ情報を題名、本文を画面より消去 viewObj.setParentId( null ); ViewObject に viewObj.setMessageSubject( null ); null を セ ッ ト viewObj.setMessageBody( null ); // メッセージリスト取得イベント { CreateMessageListEvent event = (CreateMessageListEvent)createEvent("BBPage", "CreateMessageList"); CreateMessageListEventResult result = (CreateMessageListEventResult)dispatchEvent(event); viewObj.setRootMessageList( result.getRootMessageList() ); } BBPageListViewObject の メ ソ ッ ド return serviceResult; } } 124 P75 参照 7 ソースコードの追加、変更 削除(erase) EraseMessageServiceController -----------------------------記事を削 除 するサー ビ スコント ロ ーラです 。 FrameworkProducer では、サービ ス (erase)を選択しま す 。 以下のよ う にプロパ テ ィを変更 し ます。 コントロ ー ラクラス 名 :右側の ボ タンから 「 新規のク ラ スを作成 」 から作成 し ます。 パッケー ジ 名:imsg.sample.BBPage.controller.service クラス名 :EraseMessageServiceController スーパー ク ラス: imsg.sample.BBPage.controller.service.BBPageListServiceController サービス (erase)から遷移ペー ジ(BBPageList)に接続を 作 成します 。 EraseMessageServiceController.java を編集し ます。 /* * EraseMessageServiceController.java */ package imsg.sample.BBPage.controller.service; import imsg.sample.BBPage.model.event.CreateMessageListEvent; import imsg.sample.BBPage.model.event.CreateMessageListEventResult; import imsg.sample.BBPage.model.event.EraseMessageEvent; import imsg.sample.BBPage.model.event.EraseMessageEventResult; import imsg.sample.BBPage.view.object.BBPageListViewIdentifier; import imsg.sample.BBPage.view.object.BBPageListViewObject; import java.math.BigDecimal; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import jp.co.intra_mart.framework.base.service.ServiceResult; import jp.co.intra_mart.framework.system.exception.ApplicationException; intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 125 import jp.co.intra_mart.framework.system.exception.SystemException; /** * @author * @version 1.0 */ public class EraseMessageServiceController extends BBPageListServiceController { public ServiceResult service() throws SystemException, ApplicationException { HttpServletRequest req = getRequest(); ViewObject を 一 意 に す る HttpSession session = req.getSession(); id を 取 得 String viewId = new BBPageListViewIdentifier().getId(); id か ら ViewObject を 取 得 // ViewObject の取得 BBPageListViewObject viewObj = (BBPageListViewObject)session.getAttribute(viewId); エラー情報をクリアするメソッド // チェックのクリア viewObj.clearErrorMessageMap(); // メッセージ削除イベント SourceGenerator パ ッ ケ ー ジ の ViewObject ク ラ ス の clearErrorMessageMap メ ソ ッ ド if( viewObj.getSelectedId() != null && !viewObj.getSelectedId().equals("") ) { // 選択されたメッセージ ID を event オブジェクトに設定 EraseMessageEvent event = (EraseMessageEvent)createEvent("BBPage", "EraseMessage"); event.setMessageId( new BigDecimal(viewObj.getSelectedId()) ); // メッセージ削除イベントの呼び出し EraseMessageEventResult result = (EraseMessageEventResult)dispatchEvent(event); } // メッセージリスト取得イベント { CreateMessageListEvent event = (CreateMessageListEvent)createEvent("BBPage", "CreateMessageList"); CreateMessageListEventResult result = (CreateMessageListEventResult)dispatchEvent(event); viewObj.setRootMessageList( result.getRootMessageList() ); } BBPageListViewObject の メ ソ ッ ド ServiceResult serviceResult = null; return serviceResult; } } 126 P75 参照 7 ソースコードの追加、変更 画 面 レ イ ア ウ ト の 変 更 (JSP の 変 更 ) JSP はレイアウトの 変 更が入る た め大幅な 変 更が必要 に なります 。 継承はで き ませんが、上書きの 危 険を避け る ため、自動 生成ソー ス をコピー し て別の JSP ファイル を 作成しま す 。 FrameworkProducer では、パッケ ー ジエクス プ ローラの webapp\imsg\sample\BBPage\jsp\BBPageList.jsp ファイル を編集し ま す。 MessageListView.jsp ---------------------------------------------------<%@ page contentType="text/html; charset=Windows-31J" pageEncoding="Shift_JIS" %> <%--<%@ page errorPage="" %> --%> <%@ page import="java.util.*"%> <%@ page import="imsg.sample.BBPage.view.object.*"%> <%@ taglib prefix="imartj2ee" uri="http://www.intra-mart.co.jp/taglib/core/framework" %> <%@ taglib prefix="imtag" uri="http://www.intra-mart.co.jp/taglib/core/standard" %> <%@ taglib prefix="imsg" uri="/jp.co.intra_mart.framework.tools.sourcegenerator.taglib" %> <jsp:useBean id="BBPageList" class="imsg.sample.BBPage.view.object.BBPageListViewObject" scope="session" /> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> </HEAD> <BODY> <P>掲示板 (imsg サンプル)<BR> <imartj2ee:Form application="BBPage" service="Default" method="POST" name="mainfrm"> <!-- <INPUT type="submit" value="BBPageListServiceController を呼び出す"> --> <!--入力チェックのエラー表示--> <FONT color="red"><%= BBPageList.getErrorMessageReadableText() %></FONT> <HR> <imsg:Hidden beanname="BBPageList" property="messageId" /> <imsg:Hidden beanname="BBPageList" property="parentId" /> <imsg:Hidden beanname="BBPageList" property="messageFlag" value="1" /> <TABLE border="0"> <TR> <TD align="right">題名(*)</TD> <TD align="left"> <% String blnNewOrReply = (BBPageList.getParentId() == null || BBPageList.getParentId().equals("")) ? "true" : "false"; %> <imtag:Condition validity="<%= blnNewOrReply %>"> <imsg:Text beanname="BBPageList" property="messageSubject" size="60" maxlength="100" /> <imartj2ee:Submit service="entry" value="新規に投稿" /> </imtag:Condition> <imtag:Condition validity="<%= blnNewOrReply %>" negative > <imsg:View beanname="BBPageList" property="messageSubject" /> <imsg:Hidden beanname="BBPageList" property="messageSubject" /> <imartj2ee:Submit service="entry" value="返信する" /> <imartj2ee:Submit service="cancel" value="キャンセル" /> intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 127 </imtag:Condition> </TD> </TR> <TR> <TD align="right" valign="top">本文(*)</TD> <TD align="left"><imsg:TextArea beanname="BBPageList" property="messageBody" cols="60" rows="6"></imsg:TextArea></TD> </TR> <TR> <TD align="right">名前(*)</TD> <TD align="left"><imsg:Text beanname="BBPageList" property="userName" size="40" maxlength="100" /></TD> </TR> <TR> <TD align="right">パスワード</TD> <TD align="lieft"><imsg:Password beanname="BBPageList" property="userPassword" size="40" maxlength="100" /></TD> </TR> <TR> <TD align="right">e-mail</TD> <TD align="left"><imsg:Text beanname="BBPageList" property="userEmail" size="40" maxlength="100" /></TD> </TR> <TR> <TD align="right">HomePage 名</TD> <TD align="left"><imsg:Text beanname="BBPageList" property="userHpName" size="60" maxlength="100" /></TD> </TR> <TR> <TD align="right">HomePage URL</TD> <TD align="left"><imsg:Text beanname="BBPageList" property="userHpUrl" size="60" maxlength="100" /></TD> </TR> <TR> <TD align="right">年齢</TD> <TD align="left"><imsg:Text beanname="BBPageList" property="userAge" size="6" maxlength="6" /><TD> </TR> <TR> <TD align="right">性別</TD> <TD align="left"> <imsg:Radio beanname="BBPageList" property="userSex" value="1" />男性 <imsg:Radio beanname="BBPageList" property="userSex" value="2" />女性 </TD> </TR> <TR> <TD align="right">気分</TD> <TD align="left"> <imsg:Select beanname="BBPageList" property="userFeel"> <imsg:Option value="1">喜</imsg:Option> <imsg:Option value="2">怒</imsg:Option> <imsg:Option value="3">哀</imsg:Option> <imsg:Option value="4">楽</imsg:Option> </imsg:Select> </TD> </TR> </TABLE> <P> <CENTER> 128 7 ソースコードの追加、変更 <%-- ルートメッセージ (ネストオブジェクト BBPageMessageViewObject) --%> <% { String nest1_tagName = "rootMessageList$"; List nest1_list = BBPageList.getRootMessageList(); Iterator nest1_itr = null; int nest1_index = 0; if( nest1_list != null ) { nest1_itr = nest1_list.iterator(); } while( nest1_itr != null && nest1_itr.hasNext() ) { BBPageMessageViewObject nest1_viewObj = (BBPageMessageViewObject)nest1_itr.next(); %> <TABLE border="1" width="80%" rules="none" bgcolor="#EAF4FF"> <TR> <TH align="left" colspan="2" bgcolor="#0000CC"> <FONT color="white"> <%-- 題名 --%> <imsg:View beanname="<%= nest1_viewObj %>" property="messageSubject" /><BR> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="messageSubject" name="<%= nest1_tagName + nest1_index + "$messageSubject" %>" /> </FONT> </TH> </TR> <TR> <TD bgcolor="#66CCFF" colspan="2"> <%-- 名前 --%> <imtag:Condition validity="<%= (nest1_viewObj.getUserEmail() == null || nest1_viewObj.getUserEmail().equals("")) ? "true" : "false" %>"> <imsg:View beanname="<%= nest1_viewObj %>" property="userName" /> </imtag:Condition> <imtag:Condition validity="<%= (nest1_viewObj.getUserEmail() == null || nest1_viewObj.getUserEmail().equals("")) ? "true" : "false" %>" negative> <A HREF="mailto:<imsg:View beanname="<%= nest1_viewObj %>" property="userEmail" />"> <imsg:View beanname="<%= nest1_viewObj %>" property="userName" /> </A> </imtag:Condition> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="userName" name="<%= nest1_tagName + nest1_index + "$userName" %>" /> <%-- ホームページ名 --%> <imtag:Condition validity="<%= (nest1_viewObj.getUserHpUrl() != null && !nest1_viewObj.getUserHpUrl().equals("")) ? "true" : "false" %>"> <FONT size="-1"> (<A HREF="<imsg:View beanname="<%= nest1_viewObj %>" property="userHpUrl" />"> <imsg:View beanname="<%= nest1_viewObj %>" property="userHpName" /> </A>) </FONT> </imtag:Condition> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="userHpName" name="<%= nest1_tagName + nest1_index + "$userHpName" %>" /> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="userHpUrl" name="<%= nest1_tagName + nest1_index + "$userHpUrl" %>" /> intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 129 <%-- 発信日時 --%> <FONT size="-1"> <imsg:View beanname="<%= nest1_viewObj %>" property="messageDate" /><BR> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="messageDate" name="<%= nest1_tagName + nest1_index + "$messageDate" %>" /> </FONT> </TD> </TR> <TR> <TD colspan="2"> <%-- 本文 --%> <imsg:View beanname="<%= nest1_viewObj %>" property="messageBody" /><BR> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="messageBody" name="<%= nest1_tagName + nest1_index + "$messageBody" %>" /> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="messageFlag" name="<%= nest1_tagName + nest1_index + "$messageFlag" %>" /> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="userPassword" name="<%= nest1_tagName + nest1_index + "$userPassword" %>" /> <%-- e-mail --%> <!-- <imsg:View beanname="<%= nest1_viewObj %>" property="userEmail" /><BR> --> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="userEmail" name="<%= nest1_tagName + nest1_index + "$userEmail" %>" /> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="userAge" name="<%= nest1_tagName + nest1_index + "$userAge" %>" /> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="userSex" name="<%= nest1_tagName + nest1_index + "$userSex" %>" /> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="userFeel" name="<%= nest1_tagName + nest1_index + "$userFeel" %>" /> </TD> </TR> <TR> <TD width="20" align="right" valign="top"> <%-- 項番 --%> <!-- <%= nest1_index + 1 %> --> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="messageId" name="<%= nest1_tagName + nest1_index + "$messageId" %>" /> <imsg:Hidden beanname="<%= nest1_viewObj %>" property="parentId" name="<%= nest1_tagName + nest1_index + "$parentId" %>" /> </TD> <TD> <%-- 子メッセージ (ネストオブジェクト BBPageMessageViewObject) --%> <% { String nest2_tagName = new String(nest1_tagName + nest1_index + "$childMessageList$"); List nest2_list = nest1_viewObj.getChildMessageList(); Iterator nest2_itr = null; int nest2_index = 0; if( nest2_list != null ) { nest2_itr = nest2_list.iterator(); } while( nest2_itr != null && nest2_itr.hasNext() ) { BBPageMessageViewObject nest2_viewObj = (BBPageMessageViewObject)nest2_itr.next(); 130 7 ソースコードの追加、変更 %> <TABLE border="0" width="100%" frame="above"> <TR> <TD bgcolor="#66CCFF"> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="messageId" name="<%= nest2_tagName + nest2_index + "$messageId" %>" /> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="parentId" name="<%= nest2_tagName + nest2_index + "$parentId" %>" /> <%-- 名前 --%> <imtag:Condition validity="<%= (nest2_viewObj.getUserEmail() == null || nest2_viewObj.getUserEmail().equals("")) ? "true" : "false" %>"> <imsg:View beanname="<%= nest2_viewObj %>" property="userName" /> </imtag:Condition> <imtag:Condition validity="<%= (nest2_viewObj.getUserEmail() == null || nest2_viewObj.getUserEmail().equals("")) ? "true" : "false" %>" negative> <A HREF="mailto:<imsg:View beanname="<%= nest2_viewObj %>" property="userEmail" />"> <imsg:View beanname="<%= nest2_viewObj %>" property="userName" /> </A> </imtag:Condition> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="userName" name="<%= nest2_tagName + nest2_index + "$userName" %>" /> <%-- ホームページ名 --%> <imtag:Condition validity="<%= (nest2_viewObj.getUserHpUrl() != null && !nest2_viewObj.getUserHpUrl().equals("")) ? "true" : "false" %>"> <FONT size="-1"> (<A HREF="<imsg:View beanname="<%= nest2_viewObj %>" property="userHpUrl" />"> <imsg:View beanname="<%= nest2_viewObj %>" property="userHpName" /> </A>) </FONT> </imtag:Condition> <%-- 発信日時 --%> <FONT size="-1"> <imsg:View beanname="<%= nest2_viewObj %>" property="messageDate" /> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="messageDate" name="<%= nest2_tagName + nest2_index + "$messageDate" %>" /> </FONT> </TD> </TR> <TR> <TD bgcolor="white"> <%-- 本文 --%> <imsg:View beanname="<%= nest2_viewObj %>" property="messageBody" /><BR> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="messageBody" name="<%= nest2_tagName + nest2_index + "$messageBody" %>" /> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="messageFlag" name="<%= nest2_tagName + nest2_index + "$messageFlag" %>" /> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="userPassword" name="<%= nest2_tagName + nest2_index + "$userPassword" %>" /> intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 131 <%-- 題名 --%> <!-- <imsg:View beanname="<%= nest2_viewObj %>" property="messageSubject" /><BR> --> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="messageSubject" name="<%= nest2_tagName + nest2_index + "$messageSubject" %>" /> <%-- e-mail --%> <!-- <imsg:View beanname="<%= nest2_viewObj %>" property="userEmail" /><BR> --> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="userEmail" name="<%= nest2_tagName + nest2_index + "$userEmail" %>" /> <%-- ホームページ名 --%> <!-- <imsg:View beanname="<%= nest2_viewObj %>" property="userHpName" /><BR> --> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="userHpName" name="<%= nest2_tagName + nest2_index + "$userHpName" %>" /> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="userHpUrl" name="<%= nest2_tagName + nest2_index + "$userHpUrl" %>" /> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="userAge" name="<%= nest2_tagName + nest2_index + "$userAge" %>" /> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="userSex" name="<%= nest2_tagName + nest2_index + "$userSex" %>" /> <imsg:Hidden beanname="<%= nest2_viewObj %>" property="userFeel" name="<%= nest2_tagName + nest2_index + "$userFeel" %>" /> </TD> </TR> </TABLE> <% nest2_index++; } } %> </TD> </TR> <TR> <TD align="center" colspan="2"> <!-- 返信ボタン --> <imartj2ee:Submit application="BBPage" service="reply" value="返 信" onclick="<%= "document.mainfrm.parentId.value = '" + nest1_viewObj.getMessageId() + "' ;" + "document.mainfrm.messageSubject.value = 'Re: " + nest1_viewObj.getMessageSubject() + "'" %>" /> <!-- 削除ボタン --> <imartj2ee:Submit application="BBPage" service="erase" value="削 除" onclick="<%= "document.mainfrm.selectedId.value = '" + nest1_viewObj.getMessageId() + "'" %>" /> </TD> </TR> </TABLE> <P> <% nest1_index++; } 132 7 ソースコードの追加、変更 } %> </CENTER> <imsg:Hidden beanname="BBPageList" property="selectedId" /> <HR> <!-<imartj2ee:Submit service="entry" value="投稿" /><BR> <imartj2ee:Submit service="reply" value="返信" /><BR> <imartj2ee:Submit service="erace" value="削除" /><BR> --> </imartj2ee:Form> </BODY> </HTML> プロパティファイルの変更 新しいク ラ スに対応 す るように、サービス プ ロパティ と データプ ロ パティフ ァ イルを変更 します。 FrameworkProducer では、エディ タ 画面の「 プ ロジェク ト 」を選択 し ます。 「エクス ポ ート」ボ タ ンをクリ ッ クします 。 以下のフ ァ イルが、 パ ッケージ エ クスプロ ー ラの src フォルダに 作 成されま す 。 ServiceConfig_BBPage.properties ---------------------------------------controller.class.BBPageListDefault = imsg.sample.BBPage.controller.service.BBPageListServiceController nextpage.path.BBPageListDefault = /imsg/sample/BBPage/jsp/BBPageList.jsp controller.class.start = imsg.sample.BBPage.controller.service.StartMessageServiceController nextpage.path.start = /imsg/sample/BBPage/jsp/MessageListView.jsp controller.class.cancel = imsg.sample.BBPage.controller.service.StartMessageServiceController nextpage.path.cancel = /imsg/sample/BBPage/jsp/MessageListView.jsp controller.class.entry = imsg.sample.BBPage.controller.service.EntryMessageServiceController nextpage.path.entry = /imsg/sample/BBPage/jsp/MessageListView.jsp controller.class.reply = imsg.sample.BBPage.controller.service.CreateMessageListServiceController nextpage.path.reply = /imsg/sample/BBPage/jsp/MessageListView.jsp controller.class.erase = imsg.sample.BBPage.controller.service.EraseMessageServiceController nextpage.path.erase = /imsg/sample/BBPage/jsp/MessageListView.jsp intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 133 EventConfig_BBPage.properties -----------------------------------------event.class.CreateMessageList = imsg.sample.BBPage.model.event.CreateMessageListEvent factory.class.CreateMessageList = jp.co.intra_mart.framework.base.event.StandardEventListenerFactory factory.param.CreateMessageList.listener = imsg.sample.BBPage.model.event.CreateMessageEventListener event.class.EraseMessage = imsg.sample.BBPage.model.event.EraseMessageEvent factory.class.EraseMessage = jp.co.intra_mart.framework.base.event.StandardEventListenerFactory factory.param.EraseMessage.listener = imsg.sample.BBPage.model.event.EraseMessageEventListener event.class.EntryMessage = imsg.sample.BBPage.model.event.EntryMessageEvent factory.class.EntryMessage = jp.co.intra_mart.framework.base.event.StandardEventListenerFactory factory.param.EntryMessage.listener = imsg.sample.BBPage.model.event.EntryMessageEventListener DataConfig_BBPage.properties ------------------------------------------dao.connector.BBMessage = intra_mart_db dao.class.BBMessage = imsg.sample.BBPage.model.data.MessageDAO 134 7 ソースコードの追加、変更 掲示板アプリケーションの実行 掲示板アプリケーションのソースファイル一覧 ----------------------------(Framework Producer プロジェク ト のソース フ ァイルの み) [sample] ├ [src] │ ├ [imsg] │ │ │ │ │ │ ├ [controller] │ │ │ │ │ │ ├ BBPageListServiceController.java │ │ │ ├ CreateMessageListServiceController.java │ │ │ ├ EntryMessageServiceController.java │ │ │ ├ EraseMessageServiceController.java │ │ │ └ StartMessageServiceController.java │ │ ├ [model] │ │ │ ├ [data] │ │ │ │ ├ BBMessageDAO.java │ │ │ │ ├ BBMessageDAOIF.java │ │ │ │ └ MessageDAO.java │ │ │ ├ [event] │ │ │ │ │ │ │ │ ├ CreateMessageListEventListener.java │ │ │ │ ├ CreateMessageListEventResult.java │ │ │ │ ├ EntryMessageEvent.java │ │ │ │ ├ EntryMessageEventListener.java │ │ │ │ ├ EntryMessageEventResult.java │ │ │ │ ├ EraseMessageEvent.java │ │ │ │ ├ EraseMessageEventListener.java │ │ │ │ └ EraseMessageEventResult.java │ │ │ └ [object] │ │ │ ├ BBMessageMapping.java │ │ │ └ BBMessageModelObject.java │ │ └ [view] │ │ │ │ ├ BBPageListViewIdentifier.java │ │ ├ BBPageListViewObject.java │ │ └ BBPageMessageViewObject.java │ ├ DataConfig_BBPage.properties │ ├ EventConfig_BBPage.properties │ ├ package_mapping_BBPageList.txt │ ├ package_mapping_BBPageMessageViewObject.txt │ └ ServiceConfig_BBPage.properties └ [sample] └ [BBPage] └ [service] ├ CreateMessageListEvent.java └ [object] └ [webapp] └ [imsg] └ [sample] └ [BBPage] └ [jsp] ├ BBPageList.jsp └ MessageListView.jsp intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 135 テーブル BBMESSAGE の作成 ----------------------------------------------デフォル ト データベ ー スで下記 SQL を実行し て BBMESSAGE テーブル を作成し ま す。 CREATE TABLE BBMESSAGE ( messageId NUMBER(10) PRIMARY KEY, parentId NUMBER(10), -- メッセージ ID -- 親メッセージ ID messageSubject VARCHAR2(255), -- メッセージ 題名 messageDate DATE, -- メッセージ 発信日時 messageBody VARCHAR2(1500), -- メッセージ 本文 messageFlag CHAR(1) DEFAULT '1', -- メッセージ フラグ 有効:1 削除:0 userName VARCHAR2(255), -- 発信者 名前 userPassword VARCHAR2(255), -- 発信者 パスワード userEmail VARCHAR2(255), -- 発信者 e-mail userHpName VARCHAR2(255), -- 発信者 ホームページ名 userHpUrl VARCHAR2(255), -- 発信者 ホームページ URL userAge NUMBER(3), -- 発信者 年齢 userSex CHAR(1), -- 発信者 性別 男性:1 女性:2 userFeel CHAR(1) -- 発信者 気分 ); メニューの設定 --------------------------------------------------------下記の設 定 でメニュ ー を追加し ま す。 (生成ソー スを動作 さ せた設定 か らはサー ビ ス ID のみを修正) 新しいク ラ スに対応 す るように、サービス プ ロパティ と データプ ロ パティフ ァ イルを変更 します。 プロパテ ィ ファイル の 変更は、e ビルダー を 利用する と ビジュア ル に操作で き ます。 注意事項 • テーブルで日付型を利用しているため、JDBC ドライバのバージョンによっては動作しないことがありま す。Oracle9i JDBC 9.2.0 で動作を確認しています。できるだけ最新のドライバをご使用下さい。 • 厳密な入力チェックを行っていません。数値項目には数値入力は数値以外の入力はしないで下さい。 136 7 ソースコードの追加、変更 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 137 8 付録 SourceGenerator タ グ ラ イ ブ ラ リ 機 能 SourceGenerator タグラ イブ ラ リ を 使用 す る に は、 タ グ ラ イブ ラ リ を 使用 す る JSP のペ ージで、 以 下のよう な taglib ディレクティ ブ を指定す る 必要があ り ます。 <%@ taglib prefix="imsg" uri="/jp.co.intra_mart.framework.tools.sourcegenerator.taglib" %> uri 属性には "/jp.co.intra_mart.framework.tools.sourcegenerator.taglib" を指定し てくださ い 。 prefix 属性は、そ のページ で 使用され る 全てのタ グ ライブラ リ の前に付加 され る XML 名前空 間 識 別子 を 指定 する も ので 、 任意 の 名 前を 付 けて も構 い ませ ん。(以 下、この API リストで は、 prefix 属性を "imsg" として説明しま す) < サ ンプ ル > <%@ page contentType="text/html; charset=Windows-31J" pageEncoding="Shift_JIS" %> <%@ taglib prefix="imsg" uri="/jp.co.intra_mart.framework.tools.sourcegenerator.taglib" %> <jsp:useBean id="id" class="ViewObject" scope="session" /> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> </HEAD> <BODY> キーワー ド<BR> <imsg:Text beanname="bean" property="item" size="80" maxlength="40" "Defaultkeyword" /> </BODY> </HTML> 138 value = 8 付録 Text テ キ ス ト フ ィ ー ル ド の 入 力 形 式 を 持 つ HTML 要 素 <INPUT type=” text” >タ グ を 生 成 し ま す。 初 期 値 (value)に 属 性 (beanname、 property)で 指 定 さ れ た Bean の プ ロ パ テ ィ 値 を セ ッ ト します。 Tag ボ デ ィ 空 制約 本 タ グ を 配 置 す る 場 所 は 、 HTML の INPUT タ グ に 準 じ ま す 。 属性 名前 beanname 必須 実行時評価 Yes Yes 処理対象のオブジェクトを指定します。 ※文字列を記述した場合と実行時評価を記述した場合で動作が異なります。 property Yes Yes 処理対象のプロパティを指定します。 accesskey No Yes HTML に お け る INPUT タ グ の accesskey 属 性 に 相 当 し ま す 。 alt No Yes HTML に お け る INPUT タ グ の alt 属 性 に 相 当 し ま す 。 altkey No Yes HTML に お け る INPUT タ グ の altkey 属 性 に 相 当 し ま す 。 class No Yes HTML に お け る INPUT タ グ の class 属 性 に 相 当 し ま す 。 dir No Yes HTML に お け る INPUT タ グ の dir 属 性 に 相 当 し ま す 。 disabled No Yes HTML に お け る INPUT タ グ の disabled 属 性 に 相 当 し ま す 。 id No Yes HTML に お け る INPUT タ グ の id 属 性 に 相 当 し ま す 。 lang No Yes HTML に お け る INPUT タ グ の lang 属 性 に 相 当 し ま す 。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 139 maxlength No Yes HTML に お け る INPUT タ グ の maxlength 属 性 に 相 当 し ま す 。 name No Yes HTML に お け る INPUT タ グ の name 属 性 に 相 当 し ま す 。 省 略 し た 場 合 は beanname 属 性 が 使 わ れ ま す 。 onblur No Yes HTML に お け る INPUT タ グ の onBlur 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onchange No Yes HTML に お け る INPUT タ グ の onChange 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onclick No Yes HTML に お け る INPUT タ グ の onClick 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 ondbclick No Yes HTML に お け る INPUT タ グ の onDbClick 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onfocus No Yes HTML に お け る INPUT タ グ の onFocus 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeydown No Yes HTML に お け る INPUT タ グ の onKeyDown 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeypress No Yes HTML に お け る INPUT タ グ の onKeyPress 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeyup No Yes HTML に お け る INPUT タ グ の onKeyUp 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmousedown No Yes HTML に お け る INPUT タ グ の onMouseDown 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmousemove 140 No Yes 8 付録 HTML に お け る INPUT タ グ の onMouseMove 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseout No Yes HTML に お け る INPUT タ グ の onMouseOut 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseover No Yes HTML に お け る INPUT タ グ の onMouseOver 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseup No Yes HTML に お け る INPUT タ グ の onMouseUp 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onselect No Yes HTML に お け る INPUT タ グ の onSelect 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 readonly No Yes HTML に お け る INPUT タ グ の readonly 属 性 に 相 当 し ま す 。 size No Yes HTML に お け る INPUT タ グ の size 属 性 に 相 当 し ま す 。 style No Yes HTML に お け る INPUT タ グ の style 属 性 に 相 当 し ま す 。 styleclass No Yes HTML に お け る INPUT タ グ の styleclass 属 性 に 相 当 し ま す 。 styleid No Yes HTML に お け る INPUT タ グ の styleid 属 性 に 相 当 し ま す 。 tabindex No Yes HTML に お け る INPUT タ グ の tabindex 属 性 に 相 当 し ま す 。 title No Yes HTML に お け る INPUT タ グ の title 属 性 に 相 当 し ま す 。 titlekey No Yes HTML に お け る INPUT タ グ の titlekey 属 性 に 相 当 し ま す 。 value No Yes intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 141 初 期 値 を 設 定 し ま す 。 (Bean の プ ロ パ テ ィ 値 が null の 場 合 に 適 用 さ れ ま す ) 使用例 テキストの表示 <imsg:Text beanname="bean" property="item" size="80" maxlength="40" value = "value1" /> Checkbox チ ェ ッ ク ボ ッ ク ス の 入 力 形 式 を 持 つ HTML 要 素 <INPUT type=” checkbox” >タ グ を 生 成 し ます。 value 属 性 値 と 処 理 対 象 の Bean の プ ロ パ テ ィ 値 の い ず れ か が 一 致 し た 場 合 、 checked 属 性を出力します。 Tag ボ デ ィ 空 制約 本 タ グ を 配 置 す る 場 所 は 、 HTML の INPUT タ グ に 準 じ ま す 。 属性 名前 beanname 必須 実行時評価 Yes Yes 処理対象のオブジェクトを指定します。 ※文字列を記述した場合と実行時評価を記述した場合で動作が異なります。 property Yes Yes 処理対象のプロパティを指定します。 value Yes Yes 処 理 対 象 の value 値 を 指 定 し ま す 。 accesskey No HTML に お け る INPUT タ グ の alt No HTML に お け る INPUT タ グ の altkey No HTML に お け る INPUT タ グ の checked 142 No Yes accesskey 属 性 に 相 当 し ま す 。 Yes alt 属 性 に 相 当 し ま す 。 Yes altkey 属 性 に 相 当 し ま す 。 Yes 8 付録 初 期 状 態 を 設 定 し ま す 。 (Bean の プ ロ パ テ ィ 値 が null の 場 合 に 適 用 さ れ ま す ) class No HTML に お け る INPUT タ グ の dir disabled 属 性 に 相 当 し ま す 。 Yes id 属 性 に 相 当 し ま す 。 Yes lang 属 性 に 相 当 し ま す 。 No HTML に お け る INPUT タ グ の name Yes No HTML に お け る INPUT タ グ の maxlength dir 属 性 に 相 当 し ま す 。 No HTML に お け る INPUT タ グ の lang Yes No HTML に お け る INPUT タ グ の id class 属 性 に 相 当 し ま す 。 No HTML に お け る INPUT タ グ の disabled Yes Yes maxlength 属 性 に 相 当 し ま す 。 No HTML に お け る INPUT タ グ の Yes name 属 性 に 相 当 し ま す 。 省 略 し た 場 合 は beanname 属 性 が 使 わ れ ま す 。 onblur No HTML に お け る INPUT タ グ の Yes onBlur 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onchange No HTML に お け る INPUT タ グ の Yes onChange 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onclick No HTML に お け る INPUT タ グ の Yes onClick 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 ondblclick No Yes intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 143 HTML に お け る INPUT タ グ の onDblClick 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onfocus No HTML に お け る INPUT タ グ の Yes onFocus 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeydown No HTML に お け る INPUT タ グ の Yes onKeyDown 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeypress No HTML に お け る INPUT タ グ の Yes onKeyPress 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeyup No HTML に お け る INPUT タ グ の Yes onKeyUp 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmousedown No HTML に お け る INPUT タ グ の Yes onMouseDown 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmousemove No HTML に お け る INPUT タ グ の Yes onMouseMove 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseout No HTML に お け る INPUT タ グ の Yes onMouseOut 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseover No HTML に お け る INPUT タ グ の Yes onMouseOver 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseup No HTML に お け る INPUT タ グ の Yes onMouseUp 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 144 8 付録 readonly No HTML に お け る INPUT タ グ の size No HTML に お け る INPUT タ グ の style No HTML に お け る INPUT タ グ の styleclass No HTML に お け る INPUT タ グ の styleid No HTML に お け る INPUT タ グ の tabindex No HTML に お け る INPUT タ グ の title No HTML に お け る INPUT タ グ の titlekey No HTML に お け る INPUT タ グ の Yes readonly 属 性 に 相 当 し ま す 。 Yes size 属 性 に 相 当 し ま す 。 Yes style 属 性 に 相 当 し ま す 。 Yes styleclass 属 性 に 相 当 し ま す 。 Yes styleid 属 性 に 相 当 し ま す 。 Yes tabindex 属 性 に 相 当 し ま す 。 Yes title 属 性 に 相 当 し ま す 。 Yes titlekey 属 性 に 相 当 し ま す 。 使用例 チェックボックスの表示 <imsg:Checkbox beanname="bean" property="item" value="1" />商 品 1<BR> <imsg:Checkbox beanname="bean" property="item" value="2" />商 品 2<BR> <imsg:Checkbox beanname="bean" property="item" value="3" />商 品 3<BR> intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 145 Hidden 隠 し フ ィ ー ル ド を 持 つ HTML 要 素 <INPUT type=” hidden” >タ グ を 生 成 し ま す 。 初 期 値 ( v a l u e ) に 属 性 ( b e a n n a m e 、p r o p e r t y ) で 指 定 さ れ た B e a n の プ ロ パ テ ィ 値 を セ ッ ト します。 Tag ボ デ ィ 空 制約 本 タ グ を 配 置 す る 場 所 は 、 HTML の INPUT タ グ に 準 じ ま す 。 属性 名前 beanname 必須 実行時評価 Yes Yes 処理対象のオブジェクトを指定します。 ※文字列を記述した場合と実行時評価を記述した場合で動作が異なります。 property Yes Yes 処理対象のプロパティを指定します。 alt No HTML に お け る INPUT タ グ の altkey No HTML に お け る INPUT タ グ の name No HTML に お け る INPUT タ グ の Yes alt 属 性 に 相 当 し ま す 。 Yes altkey 属 性 に 相 当 し ま す 。 Yes name 属 性 に 相 当 し ま す 。 省 略 し た 場 合 は beanname 属 性 が 使 わ れ ま す 。 title No HTML に お け る INPUT タ グ の titlekey No HTML に お け る INPUT タ グ の value No Yes title 属 性 に 相 当 し ま す 。 Yes titlekey 属 性 に 相 当 し ま す 。 Yes 初 期 値 を 設 定 し ま す 。 (Bean の プ ロ パ テ ィ 値 が null の 場 合 に 適 用 さ れ ま す ) 使用例 隠しフィールドの設定 146 <imsg:Hidden beanname="bean" property="item" value="value" /> 8 付録 Password パ ス ワ ー ド の 入 力 形 式 を 持 つ HTML 要 素 <INPUT type=” password” >タ グ を 生 成 し ま す 。 初 期 値 ( v a l u e ) に 属 性 ( b e a n n a m e 、p r o p e r t y ) で 指 定 さ れ た B e a n の プ ロ パ テ ィ 値 を セ ッ ト し ます。 Tag ボ デ ィ 空 制約 本 タ グ を 配 置 す る 場 所 は 、 HTML の INPUT タ グ に 準 じ ま す 。 属性 名前 beanname 必須 Yes 実行時評価 Yes 処理対象のオブジェクトを指定します。 ※文字列を記述した場合と実行時評価を記述した場合で動作が異なります。 property Yes Yes 処理対象のプロパティを指定します。 accesskey No Yes HTML に お け る INPUT タ グ の accesskey 属 性 に 相 当 し ま す 。 alt No Yes HTML に お け る INPUT タ グ の alt 属 性 に 相 当 し ま す 。 altkey No Yes HTML に お け る INPUT タ グ の altkey 属 性 に 相 当 し ま す 。 class No Yes HTML に お け る INPUT タ グ の class 属 性 に 相 当 し ま す 。 dir No Yes HTML に お け る INPUT タ グ の dir 属 性 に 相 当 し ま す 。 disabled No Yes HTML に お け る INPUT タ グ の disabled 属 性 に 相 当 し ま す 。 id No Yes intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 147 HTML に お け る INPUT タ グ の id 属 性 に 相 当 し ま す 。 lang No Yes HTML に お け る INPUT タ グ の lang 属 性 に 相 当 し ま す 。 maxlength No Yes HTML に お け る INPUT タ グ の maxlength 属 性 に 相 当 し ま す 。 name No Yes HTML に お け る INPUT タ グ の name 属 性 に 相 当 し ま す 。 省 略 し た 場 合 は beanname 属 性 が 使 わ れ ま す 。 onblur No Yes HTML に お け る INPUT タ グ の onBlur 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onchange No Yes HTML に お け る INPUT タ グ の onChange 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onclick No Yes HTML に お け る INPUT タ グ の oncCick 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 ondbclick No Yes HTML に お け る INPUT タ グ の onDbClick 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onfocus No Yes HTML に お け る INPUT タ グ の onFocus 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeydown No Yes HTML に お け る INPUT タ グ の onKeyDown 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeypress 148 No Yes 8 付録 HTML に お け る INPUT タ グ の onKeyPress 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeyup No Yes HTML に お け る INPUT タ グ の onKeyUp 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmousedown No Yes HTML に お け る INPUT タ グ の onMouseDown 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmousemove No Yes HTML に お け る INPUT タ グ の onMouseMove 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseout No Yes HTML に お け る INPUT タ グ の onMouseOut 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseover No Yes HTML に お け る INPUT タ グ の onMouseOver 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseup No Yes HTML に お け る INPUT タ グ の onMouseUp 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onselect No Yes HTML に お け る INPUT タ グ の onselect 属 性 に 相 当 し ま す 。 readonly No Yes HTML に お け る INPUT タ グ の readonly 属 性 に 相 当 し ま す 。 size No Yes HTML に お け る INPUT タ グ の size 属 性 に 相 当 し ま す 。 style No Yes intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 149 HTML に お け る INPUT タ グ の style 属 性 に 相 当 し ま す 。 styleclass No Yes HTML に お け る INPUT タ グ の styleclass 属 性 に 相 当 し ま す 。 styleid No Yes HTML に お け る INPUT タ グ の styleid 属 性 に 相 当 し ま す 。 tabindex No Yes HTML に お け る INPUT タ グ の tabindex 属 性 に 相 当 し ま す 。 title No Yes HTML に お け る INPUT タ グ の title 属 性 に 相 当 し ま す 。 titlekey No Yes HTML に お け る INPUT タ グ の titlekey 属 性 に 相 当 し ま す 。 value No Yes 初 期 値 を 設 定 し ま す 。 (Bean の プ ロ パ テ ィ 値 が null の 場 合 に 適 用 さ れ ま す ) 使用例 パスワードフィールドの表示 <imsg:Password beanname="bean" property="item" size="80" maxlength="40" value="DefaultPassword" /> 150 8 付録 Radio ラ ジ オ ボ タ ン の 入 力 形 式 を 持 つ HTML 要 素 <INPUT type=” radio” >タ グ を 生 成 し ま す 。 value 属 性 値 と Bean の プ ロ パ テ ィ 値 が 一 致 し た 場 合 、 checked 属 性 を 出 力 し ま す 。 Tag ボ デ ィ 空 制約 本 タ グ を 配 置 す る 場 所 は 、 HTML の INPUT タ グ に 準 じ ま す 。 属性 名前 beanname 必須 Yes 実行時評価 Yes 処理対象のオブジェクトを指定します。 ※文字列を記述した場合と実行時評価を記述した場合で動作が異なります。 property Yes Yes 処理対象のプロパティを指定します。 value Yes Yes ラ ジ オ ボ タ ン の value 値 を 指 定 し ま す 。 accesskey No Yes HTML に お け る INPUT タ グ の accesskey 属 性 に 相 当 し ま す 。 alt No Yes HTML に お け る INPUT タ グ の alt 属 性 に 相 当 し ま す 。 altkey No Yes HTML に お け る INPUT タ グ の altkey 属 性 に 相 当 し ま す 。 checked No Yes 初 期 状 態 を 設 定 し ま す 。 (Bean の プ ロ パ テ ィ 値 が null の 場 合 に 適 用 さ れ ま す ) class No Yes HTML に お け る INPUT タ グ の class 属 性 に 相 当 し ま す 。 dir No Yes HTML に お け る INPUT タ グ の dir 属 性 に 相 当 し ま す 。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 151 disabled No Yes HTML に お け る INPUT タ グ の disabled 属 性 に 相 当 し ま す 。 id No Yes HTML に お け る INPUT タ グ の id 属 性 に 相 当 し ま す 。 lang No Yes HTML に お け る INPUT タ グ の lang 属 性 に 相 当 し ま す 。 maxlength No Yes HTML に お け る INPUT タ グ の maxlength 属 性 に 相 当 し ま す 。 name No Yes HTML に お け る INPUT タ グ の name 属 性 に 相 当 し ま す 。 省 略 し た 場 合 は beanname 属 性 が 使 わ れ ま す 。 onblur No Yes HTML に お け る INPUT タ グ の onBlur 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onchange No Yes HTML に お け る INPUT タ グ の onChange 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onclick No Yes HTML に お け る INPUT タ グ の onClick 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 ondblclick No Yes HTML に お け る INPUT タ グ の onDblClick 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onfocus No Yes HTML に お け る INPUT タ グ の onFocus 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeydown 152 No Yes 8 付録 HTML に お け る INPUT タ グ の onKeyDown 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeypress No Yes HTML に お け る INPUT タ グ の onKeyPress 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeyup No Yes HTML に お け る INPUT タ グ の onKeyUp 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmousedown No Yes HTML に お け る INPUT タ グ の onMouseDown 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmousemove No Yes HTML に お け る INPUT タ グ の onMouseMove 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseout No Yes HTML に お け る INPUT タ グ の onMouseOut 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseover No Yes HTML に お け る INPUT タ グ の onMouseOver 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseup No Yes HTML に お け る INPUT タ グ の onMouseUp 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 readonly No Yes HTML に お け る INPUT タ グ の readonly 属 性 に 相 当 し ま す 。 size No Yes HTML に お け る INPUT タ グ の size 属 性 に 相 当 し ま す 。 style No Yes intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 153 HTML に お け る INPUT タ グ の style 属 性 に 相 当 し ま す 。 styleclass No Yes HTML に お け る INPUT タ グ の styleclass 属 性 に 相 当 し ま す 。 styleid No Yes HTML に お け る INPUT タ グ の styleid 属 性 に 相 当 し ま す 。 tabindex No Yes HTML に お け る INPUT タ グ の tabindex 属 性 に 相 当 し ま す 。 title No Yes HTML に お け る INPUT タ グ の title 属 性 に 相 当 し ま す 。 titlekey No Yes HTML に お け る INPUT タ グ の titlekey 属 性 に 相 当 し ま す 。 使用例 ラジオボタンの表示 <imsg:Radio beanname="bean" property="item" value="1" />商 品 1<BR> <imsg:Radio beanname="bean" property="item" value="2" />商 品 2<BR> 154 8 付録 TextArea 複 数 行 テ キ ス ト フ ィ ー ル ド の 入 力 形 式 を 持 つ HTML 要 素 <TEXTAREA>タ グ を 生 成 し ま す 。 BODY に 属 性 (beanname、 property)で 指 定 し た Bean の プ ロ パ テ ィ 値 を セ ッ ト し ま す 。 JSP Tag ボ デ ィ 初期値を指定します。 制約 本 タ グ を 配 置 す る 場 所 は 、 HTML の TEXTAREA タ グ に 準 じ ま す 。 属性 名前 beanname 必須 Yes 実行時評価 Yes 処理対象のオブジェクトを指定します。 ※文字列を記述した場合と実行時評価を記述した場合で動作が異なります。 property Yes Yes 処理対象のプロパティを指定します。 accesskey No Yes HTML に お け る TEXTAREA タ グ の accesskey 属 性 に 相 当 し ま す 。 alt No Yes HTML に お け る TEXTAREA タ グ の alt 属 性 に 相 当 し ま す 。 altkey No Yes HTML に お け る TEXTAREA タ グ の altkey 属 性 に 相 当 し ま す 。 class No Yes HTML に お け る TEXTAREA タ グ の class 属 性 に 相 当 し ま す 。 cols No Yes HTML に お け る TEXTAREA タ グ の cols 属 性 に 相 当 し ま す 。 dir No Yes HTML に お け る TEXTAREA タ グ の dir 属 性 に 相 当 し ま す 。 disabled No Yes intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 155 HTML に お け る TEXTAREA タ グ の disabled 属 性 に 相 当 し ま す 。 id No Yes HTML に お け る TEXTAREA タ グ の id 属 性 に 相 当 し ま す 。 lang No Yes HTML に お け る TEXTAREA タ グ の lang 属 性 に 相 当 し ま す 。 name No Yes HTML に お け る TEXTAREA タ グ の name 属 性 に 相 当 し ま す 。 省 略 し た 場 合 は beanname 属 性 が 使 わ れ ま す 。 onblur No Yes HTML に お け る TEXTAREA タ グ の onBlur 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onchange No Yes HTML に お け る TEXTAREA タ グ の onChange 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onclick No Yes HTML に お け る TEXTAREA タ グ の onClick 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 ondblclick No Yes HTML に お け る TEXTAREA タ グ の onDblClick 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onfocus No Yes HTML に お け る TEXTAREA タ グ の onFocus 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeydown No Yes HTML に お け る TEXTAREA タ グ の onKeyDown 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeypress 156 No Yes 8 付録 HTML に お け る TEXTAREA タ グ の onKeyPress 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeyup No Yes HTML に お け る TEXTAREA タ グ の onKeyUp 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmousedown No Yes HTML に お け る TEXTAREA タ グ の onMouseDown 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmousemove No Yes HTML に お け る TEXTAREA タ グ の onMouseMove 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseout No Yes HTML に お け る TEXTAREA タ グ の onMouseOut 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseover No Yes HTML に お け る TEXTAREA タ グ の onMouseOver 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseup No Yes HTML に お け る TEXTAREA タ グ の onMouseUp 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onselect No Yes HTML に お け る TEXTAREA タ グ の onselect 属 性 に 相 当 し ま す 。 readonly No Yes HTML に お け る TEXTAREA タ グ の readonly 属 性 に 相 当 し ま す 。 rows No Yes HTML に お け る TEXTAREA タ グ の rows 属 性 に 相 当 し ま す 。 style No Yes intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 157 HTML に お け る TEXTAREA タ グ の style 属 性 に 相 当 し ま す 。 styleclass No Yes HTML に お け る TEXTAREA タ グ の styleclass 属 性 に 相 当 し ま す 。 styleid No Yes HTML に お け る TEXTAREA タ グ の styleid 属 性 に 相 当 し ま す 。 tabindex No Yes HTML に お け る TEXTAREA タ グ の tabindex 属 性 に 相 当 し ま す 。 title No Yes HTML に お け る TEXTAREA タ グ の title 属 性 に 相 当 し ま す 。 titlekey No Yes HTML に お け る TEXTAREA タ グ の titlekey 属 性 に 相 当 し ま す 。 wrap No Yes HTML に お け る TEXTAREA タ グ の wrap 属 性 に 相 当 し ま す 。 使用例 複数テキストフィールドの表示 <imsg:TextArea beanname="bean" property="item" cols="60" rows="5"/> 158 8 付録 View プロパティ値を表示します。 Tag ボ デ ィ 空 制約 なし 属性 名前 beanname 必須 Yes 実行時評価 Yes 処理対象のオブジェクトを指定します。 ※文字列を記述した場合と実行時評価を記述した場合で動作が異なります。 property Yes Yes 処理対象のプロパティを指定します。 value No Yes 初 期 値 を 設 定 し ま す 。 (Bean の プ ロ パ テ ィ 値 が null の 場 合 に 適 用 さ れ ま す ) 使用例 bean の プ ロ パ テ ィ 値 の 表 示 <imsg:View beanname="bean" property="item" /> intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 159 Select <SELECT>タ グ を 生 成 し ま す 。 内 部 タ グ に 記 述 さ れ た <imsg:Option />タ グ は beanname、 property 属 性 を 省 略 で き ま す 。 こ の と き Option タ グ は Select タ グ の beanname、 property 属 性 を 参 照 し ま す 。 Tag ボ デ ィ JSP 制約 本 タ グ を 配 置 す る 場 所 は 、 HTML の SELECT タ グ に 準 じ ま す 。 属性 名前 beanname 必須 Yes 実行時評価 Yes 処理対象のオブジェクトを指定します。 ※文字列を記述した場合と実行時評価を記述した場合で動作が異なります。 property Yes Yes 処理対象のプロパティを指定します。 class No Yes HTML に お け る SELECT タ グ の class 属 性 に 相 当 し ま す 。 dir No Yes HTML に お け る SELECT タ グ の dir 属 性 に 相 当 し ま す 。 disabled No Yes HTML に お け る SELECT タ グ の disabled 属 性 に 相 当 し ま す 。 id No Yes HTML に お け る SELECT タ グ の id 属 性 に 相 当 し ま す 。 lang No Yes HTML に お け る SELECT タ グ の lang 属 性 に 相 当 し ま す 。 multiple No Yes HTML に お け る SELECT タ グ の multiple 属 性 に 相 当 し ま す 。 name 160 No Yes 8 付録 HTML に お け る SELECT タ グ の name 属 性 に 相 当 し ま す 。 省 略 し た 場 合 は beanname 属 性 が 使 わ れ ま す 。 onblur No Yes HTML に お け る SELECT タ グ の onBlur 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onchange No Yes HTML に お け る SELECT タ グ の onChange 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onclick No Yes HTML に お け る SELECT タ グ の onClick 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 ondblclick No Yes HTML に お け る SELECT タ グ の onDblClick 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onfocus No Yes HTML に お け る SELECT タ グ の onFocus 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeydown No Yes HTML に お け る SELECT タ グ の onKeyDown 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeypress No Yes HTML に お け る SELECT タ グ の onKeyPress 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeyup No Yes HTML に お け る SELECT タ グ の onKeyUp 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmousedown No Yes HTML に お け る SELECT タ グ の onMouseDown 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 161 onmousemove No Yes HTML に お け る SELECT タ グ の onMouseMove 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseout No Yes HTML に お け る SELECT タ グ の onMouseOut 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseover No Yes HTML に お け る SELECT タ グ の onMouseOver 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseup No Yes HTML に お け る SELECT タ グ の onMouseUp 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 size No Yes HTML に お け る SELECT タ グ の size 属 性 に 相 当 し ま す 。 style No Yes HTML に お け る SELECT タ グ の style 属 性 に 相 当 し ま す 。 tabindex No Yes HTML に お け る SELECT タ グ の tabindex 属 性 に 相 当 し ま す 。 title No Yes HTML に お け る SELECT タ グ の title 属 性 に 相 当 し ま す 。 内部タグ Optionタ グ <SELECT>タ グ の オ プ シ ョ ン 要 素 と な る HTML 要 素 <OPTION>タ グ を 生 成 し ま す 。 value 属 性 値 と 処 理 対 象 の Bean の プ ロ パ テ ィ (配 列 )の い ず れ か の 値 が 一 致 し た 場 合 、 selected 属 性 を 出 力 し ま す 。 使用例 リストボックスの表示 162 8 付録 <imsg:Select beanname="bean" property="item" size="10"> <imsg:Option value="1">January</imsg:Option> <imsg:Option value="2">February</imsg:Option> </imsg:Select> intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 163 Option <SELECT>タ グ の オ プ シ ョ ン 要 素 と な る HTML 要 素 <OPTION>タ グ を 生 成 し ま す 。 value 属 性 値 と 処 理 対 象 の Bean の プ ロ パ テ ィ (配 列 )の い ず れ か の 値 が 一 致 し た 場 合 、 selected 属 性 を 出 力 し ま す 。 Tag ボ デ ィ JSP 制約 本 タ グ を 配 置 す る 場 所 は 、 HTML の OPTION タ グ に 準 じ ま す 。 属性 名前 beanname 必須 No 実行時評価 Yes 処理対象のオブジェクトを指定します。 ※文字列を記述した場合と実行時評価を記述した場合で動作が異なります。 property No Yes 処理対象のプロパティを指定します。 value Yes Yes 処 理 対 象 の value 値 を 指 定 し ま す 。 class No Yes HTML に お け る OPTION タ グ の class 属 性 に 相 当 し ま す 。 dir No Yes HTML に お け る OPTION タ グ の dir 属 性 に 相 当 し ま す 。 disabled No Yes HTML に お け る OPTION タ グ の disabled 属 性 に 相 当 し ま す 。 id No Yes HTML に お け る OPTION タ グ の id 属 性 に 相 当 し ま す 。 lang No Yes HTML に お け る OPTION タ グ の lang 属 性 に 相 当 し ま す 。 onclick 164 No Yes 8 付録 HTML に お け る OPTION タ グ の onClick 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 ondbclick No Yes HTML に お け る OPTION タ グ の onDbClick 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeydown No Yes HTML に お け る OPTION タ グ の onKeyDown 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeypress No Yes HTML に お け る OPTION タ グ の onKeyPress 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onkeyup No Yes HTML に お け る OPTION タ グ の onKeyUp 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmousedown No Yes HTML に お け る OPTION タ グ の onMouseDown 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmousemove No Yes HTML に お け る OPTION タ グ の onMouseMove 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseout No Yes HTML に お け る OPTION タ グ の onMouseOut 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseover No Yes HTML に お け る OPTION タ グ の onMouseOver 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 onmouseup No Yes HTML に お け る OPTION タ グ の onMouseUp 属 性 に 相 当 し ま す 。 注意:属性名はすべて小文字で記述してください。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 165 selected No Yes HTML に お け る OPTION タ グ の selected 属 性 に 相 当 し ま す 。 style No Yes HTML に お け る OPTION タ グ の style 属 性 に 相 当 し ま す 。 title No Yes HTML に お け る OPTION タ グ の title 属 性 に 相 当 し ま す 。 使用例 ドロップダウンリストの表示 <select name="month"> <imsg:Option beanname="bean" property="item" value="1">January</imsg:Option> <imsg:Option beanname="bean" property="item" value="2">February</imsg:Option> </select> ※beanname に 文字 列を記 述し た場合 と実 行時評 価を 記述し た場 合の動 作の 違い ・ 文字 列を記 述し た場合 この 名 前を持つ オ ブジェク ト がページ 、リクエス ト 、セッシ ョ ン、アプ リ ケーション の各スコ ー プから検 索 されます 。 (記述例 )beanname="viewObj" ・ 実行 時評価 を記 述した 場合 この 名 前のスク リ プティン グ 変数が使 わ れます。 (記述例 )beanname="<%= viewObj %>" (文 字列 と実行 時評 価の動 作の 違い) <% // ス ク リ プ テ ィ ン グ 変 数 viewObj ViewObject viewObj = new ViewObject(); viewObj.setItem("コ ー ラ ");//ア イ テ ム プ ロ パ テ ィ に "コ ー ラ "を 設 定 し ま す // セ ッ シ ョ ン ス コ ー プ の オ ブ ジ ェ ク ト viewObj session.setAttribute("viewObj", viewObj);//セ ッ シ ョ ン ス コ ー プ に viewObj を 格 納 し ま す viewObj = new ViewObject(); viewObj.setItem("ペ プ シ ");//Item プ ロ パ テ ィ に "ペ プ シ "を 設 定 し ま す %> JSP ソ ー ス : <ismg:Text beanname="viewObj" property="item" /> HTML 出 力 : <INPUT type="text" name="viewObj" value="コ ー ラ "> 166 8 付録 JSP ソ ー ス : <ismg:Text beanname="<%= viewObj %>" property="item" /> HTML 出 力 : <INPUT type="text" name="viewObj" value="ペ プ シ "> intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 167 SourceGenerator 拡 張 ク ラ ス ラ イ ブ ラ リ 機 能 intra-mart SourceGenerator パ ッ ケ ー ジ jp.co.intra_mart.framework.tools.sourcegenerator.model モデルオブジェクト操作ク ラス jp.co.intra_mart.framework.tools.sourcegenerator.taglib タ グ ラ イ ブ ラ リ jp.co.intra_mart.framework.tools.sourcegenerator.util 汎用関数 jp.co.intra_mart.framework.tools.sourcegenerator.view ビューオブジェクト操作ク ラス パッケージ jp.co.intra_mart.framework.tools.sourcegenerator.model -----インタフェースの概要 ModelObjectIF ModelObject を 継 承 す る ク ラ ス が 実 装 す る イ ン タ ー フ ェ ー ス で す 。 クラスの概要 FiliationComponent 階 層 関 係 の 処 理 を す る ク ラ ス で す 。 ModelObject タイトル: 自動生成するモデルオブジェクトの親クラスです。 StatusObject ステータスモデルオブジェクト パッケージ jp.co.intra_mart.framework.tools.sourcegenerator.taglib ----クラスの概要 HtmlCheckboxTag チェックボックス HtmlHiddenTag 隠しフィールド HtmlOptionTag オプションボタン HtmlPasswordTag パスワード HtmlRadioTag ラジオボタン HtmlSelectTag 選択リスト HtmlTextAreaTag テキストエリア HtmlTextTag テキスト HtmlViewTag ビュー ImsgBodyTagSupport SourceGenerator 向 け の メ ソ ッ ド を 追 加 し た BodyTagSupport ク ラ ス で す。 ImsgTagSupport SourceGenerator 向 け の メ ソ ッ ド を 追 加 し た TagSupport ク ラ ス で す 。 パッケージ jp.co.intra_mart.framework.tools.sourcegenerator.util ------クラスの概要 AccessIDGenerator オ ブ ジ ェ ク ト ア ク セ ス ID の 作 成 168 DateFunction 日付関連関数群 InputCheck 入力チェック関数群 NumericFunction 数値関連関数群 8 付録 StringCompilation 文 字 列 比 較 パッケージ jp.co.intra_mart.framework.tools.sourcegenerator.view ------インタフェースの概要 ViewObjectIF ViewObject を 継 承 す る ク ラ ス が 実 装 す る イ ン タ ー フ ェ ー ス で す 。 クラスの概要 ViewIdentifier ViewObject の 親 オ ブ ジ ェ ク ト を 特 定 す る た め の 識 別 子 を 保 持 す る ク ラ ス です。 ViewObject 画面情報を保持するクラスです。 intra-mart J2EE ソースコードジェネレータ チュートリアルガイド 169 8 付録 プログラミング・ガイド J2EE ベース開発モデル
© Copyright 2024 Paperzz