かずきのBlog

C#やJavaやRubyとメモ書き

目次

Blog 利用状況

ニュース

わんくまBlogが不安定になったため、前に書いてたはてなダイアリーにメインを移動します。
かずきのBlog@Hatena
技術的なネタは、こちらにも、はてなへのリンクという形で掲載しますが、雑多ネタははてなダイアリーだけに掲載することが多いと思います。
コメント
プログラマ的自己紹介
お気に入りのツール/IDE
プロフィール
経歴
アクセサリ

書庫

日記カテゴリ

[Java][NetBeans]Visual Web JSFを使った一覧/更新画面作成

Woodstockコンポーネントが非常に使いにくいNetBeansのVisual Web JSFですが、標準のJSFのコンポーネントもついてきてるので、そっちを使った場合の画面の作り方を書いてみようと思う。
Woodstockのコンポーネントを使った例とかは、恐らく本家のほうにいっぱい?あると思うので。

因みに、使用しているNetBeansのバージョンは6.5のRC2です。
Windows Vista Business SP1の上では順調に動いてる。あんまり使ってないけど、普通に立ち上げて軽く使う分には問題なさそうな感じです。

プロジェクト作成

StdVWJEduという名前でWebアプリケーションを新規作成する。

  • アプリケーションサーバはGlassFish v2
  • 使用するフレームワークはVisual Web JSF

使用するDBは、sampleデータベースにする。テーブルはCustomerテーブルを使おうと思う。

エンティティの作成

JPAのエンティティを作成する。

  1. ソースパッケージにentitiesパッケージを作成する
    image
  2. 次にデータベースからのエンティティークラスを作成image
  3. データソースをjdbc/sampleにしてCUSTOMER表を選択した状態にして次へ
    image
  4. 持続性ユニットが無いといわれるのでボタンを押して作成する
    image
  5. ダイアログが出るが、そのまま完了。
  6. 完了をするとクラスが作成される。
    image

これでエンティティクラスの作成は完了。次は、画面の見た目を作っていこうと思う。

画面の作成

Page1.jspを作りこんで行く。
といっても、とりあえず画面にデータ表を貼り付けるだけ。
image

Javaのほうに移動してListDataModel型のdataModelという名前のプロパティを作成する。
ついでに、DBアクセスするときに使うEntityManagerのフィールドも作成しておく。

// DBアクセスに使うエンティティマネージャ
@PersistenceContext
private EntityManager em;

// 表に表示するためのデータの入れ物
private ListDataModel dataModel;
public ListDataModel getDataModel() {
    return dataModel;
}
public void setDataModel(ListDataModel dataModel) {
    this.dataModel = dataModel;
}

そうして、prerenderメソッドに下記の処理を追加する。

@Override
public void prerender() {
    if (dataModel == null) {
        // dataModelが存在しない場合はDBからデータを取得する
        List<Customer> customers = em.createQuery("select c from Customer c order by c.customerId").getResultList();
        dataModel = new ListDataModel(customers);
    }
}

このままだと、管理ビーンはRequestスコープなので毎回dataModelはnullに初期化されてしまう。なので、毎回DBにアクセスするはめになる。
ケースバイケースだけど、今回は毎回DBに行くよりも前回のデータをSessonに保持するようにした。

使用するのはinitメソッドとdestroyメソッド。initにSessionからのデータの取得。destroyにSessionへのデータの格納処理を書く。

@Override
public void init() {
    // 自動生成されるコードは省略

    // TODO - add your own initialization code here
    dataModel = (ListDataModel) getSessionMap().get("Page1.dataModel");
}
@Override
public void destroy() {
    getSessionMap().put("Page1.dataModel", dataModel);
}

これで、データが保持されるようになった。最後にdataModelと画面に置いたデータ表を関連付ける。
データ表の右クリックメニューで「表レイアウト」を選択する。
image

出てくる画面で、先ほど作成したdataProviderプロパティを指定する。

カラムを3つ追加する。
image

各カラムに対して以下の設定を行う。

column1

設定項目名
ヘッダーテキスト ID
フッターテキスト (未入力状態)
コンポーネントの種類 出力テキスト
#{currentRow.customerId}

column2の場合は、値の部分が#{currentRow.name}、ヘッダーテキストがNameに変わるだけのはず。column3は値を#{currentRow.zip}に、ヘッダーテキストをZipに設定する。

この時点で実行すると、データが表示される簡単な画面が出来上がっている。
image

これで一覧表示が出来た。見た目とかには拘らないし、たくさんデータがあるときの処理なども考慮してないけど。
次は、IDの列をアンカーにして、そこをクリックすると更新用の画面に移動させて更新をするようにしたいと思う。

今日は、眠いのでここまで。

投稿日時 : 2008年11月3日 2:56

Feedback

# NetBeans 2009/11/07 21:16 ĿŪʥΥڡ PukiWiki plus! (PukiWiki/TrackBack 0.3)

NetBeans? &nbsp;С NetBeans IDE 6.7.1 &nbsp;Groovy ?Java?????GroovyΥ??????GroovyΥ??????ä? &nbsp;Visual JSF 6.7???ä...

タイトル  
名前  
Url
コメント