• 検索結果がありません。

 9章「Ajax機能」では、コマンドボタンにAjax機能を持たせることにより操作しやすいテキスト編 集処理を作成しました(9章の例題3)。ただ、9章はテキストを普通のファイルから読み書きしてい たので、この練習ではテキストをデータベースに入れて編集するように変更します。

 完成時の画面を示します。データベースに登録するのは、Bookクラス(Bookエンティティ)です。

Bookエンティティには、書籍の題名や著者名、作成年月日なども登録するので、本文テキスト以 外に、それらも画面の上端に表示します。

16

 exercise_chap16プロジェクトを開いて、以下の手順にしたがって作成しなさい。

1. 複合キークラス(exercise_chap16/beans/BkKey.java)の修正

 データベースに保存するBookエンティティの主キーは、複合キーです。最初に複合キー・ク ラスであるBkKey.javaを開いて次の修正をしなさい

 クラスは、次のようなフィールド変数からなります。これらが全体で1つのキーとなる複合キー です。

private String publisher; // 出版社コード

private String code; // 書籍コード

① 複合キークラスであることを示す@Embeddableアノテーションを付ける

② 複合キークラスに必須のequals()メソッドとhashcode()メソッドをNetBeansの機能を使っ て自動生成しなさい。自動生成の手順は次の通りです。

 空白行(23行~)にカーソルを置き、メニューで次のようにする   <1>[ソース]→[コードを挿入]と選択

  <2>表示される選択肢から[equals()およびhashcode()...]を選ぶ

16

2. Bookエンティティ・クラス(exercise_chap16/beans/Book.java)の修正  Bookエンティティは次のようなフィールドから構成されます。

private BkKey id; // 主キー(複合キー)

private String title; // 題名

private String author; // 出版社 private LocalDate pdate; // 作成年月日

private String text; // テキスト

① idに複合キーであることを示す@EmbeddedIdアノテーションを付けなさい

② textに@Lobアノテーションと@Basicアノテーションを付け、遅延フェッチするように指定し なさい

3. バッキングビーン(exercise_chap16/beans/Bb.java)の修正

 バッキングビーンのフィールド変数は次のようです。これらがindex.xhtmlに表示される データです。

private BkKey id; // 主キー private String title; // 題名

private String author; // 著者名

private Calendar pdate; // 作成年月日

private String text; // 本文

 バッキングビーンには、@PostConstructを付けたinit()メソッドがあります。init()メソッ ドは、システムの起動時にBookエンティティを作成してデータベースに登録します。ただし、2度 目以降のアクセスでは、データベースから読み出したエンティティをフィールド変数にセットして 表示します。

 この部分の処理は何も書いていないので、自分で作成しなさい。ただし、次の疑似コードの手 順に従いなさい。

① 複合キーを作成する --- BkKey key=new BkKey("aozora", "1");

② 複合キーでデータベースを検索しエンティティを得る --- Book book = db.find(key);

③ bookはnullか?

<nullの場合> --- 登録がないということなので、フィールド変数に値を代入し、それを使って bookエンティティを作成して登録する

  ①id(フィールド変数)にkeyを代入する   ②titleに"杜子春"を代入する   ③authorに"芥川龍之介"を代入する

  ④pdateにLocalDateオブジェクトを代入する    --- pdate = LocalDate.now();

  ⑤textにresources/data/toshishun.txtを読み込む

   --- text = FileUtil.getText("/resources/data/toshishun.txt")

16

  ⑥以上のフィールド変数とBookのコンストラクタを使ってエンティティbookを作成    --- Book book = new Book(id, title, author, pdate, text)

  ⑦bookをデータベースに新規登録する(BookDbクラスを使う)

<nullでない場合> --- 登録があったので、検索結果をフィールド変数に代入する   id,title,author,pdate,text にそれぞれ値を代入する

  [例 id = book.getId(); のようにする]

4. 動作テスト

 実行して、正常に動くことを確認する

関連したドキュメント