ひこぽんのーと

覚書と雑記です。

JavaEE 7をやってみよう。 JSF テンプレートXML その2

その1のつづき。

前回、VIEWを作ったので、
今回は、DB検索を行うManaged Beanを作り、JSFで結果表示を行ってみる。
JSFのManaged BeanについてはCDIの回に少し書いた。
Managed Beanは画面アクションとBeanの処理を紐付けできるような、
いわゆるアクションクラス的な位置付けのクラス。
今回の要件で言えば、
画面表示時に艦艇テーブルから全件抽出できるような処理を持つJavaクラス、ということになる。

ま、JPA編のその8でRESTによるWebAPIを作ったので、
処理内容としてはそれと同じものを作ることになるんだけどね。

といったところで、ソース。

WarshipCatalogクラス

package app.manage;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Named;

import model.Warship;
import ejbModule.WarshipServiceLocal;

@RequestScoped
@Named(value="warShipCat")
public class WarshipCatalog {
    @EJB
    private WarshipServiceLocal ejb;
    
    private ListDataModel<Warship> allList;
    
    @PostConstruct
    private void init() {
        List<Warship> warShipList = ejb.getAllList();
        allList = new ListDataModel<Warship>(warShipList);
    }

    public ListDataModel<Warship> getAllList() {
        return allList;
    }

    public void setAllList(ListDataModel<Warship> allList) {
        this.allList = allList;
    }
}

EJBの使い方はManaged Beanで使っても変わらないので、
難しいところは無いと思う。
@PostConstructアノテーションを付けたメソッドでDB参照を呼び出しているので、
このクラスのインスタンスが作られるたびにDB検索が行われメンバに格納される。
VIEWはそのメンバから値を読み出す、仕掛け的にはただそれだけ。

といったところで、完成。

動確、行ってみよう!

Wildflyを起動して、プロジェクトをデプロイ後、
下記のURLにアクセスするとDBに格納したデータが表示される。
http://localhost:8080/(Webプロジェクト名)/faces/jsf/view/warship.xhtml

f:id:nagamitsu1976:20151010130259p:plain

安直ではあるが、これでVIEWも完成。
登録、削除機能を作る下地もできたので、
以後はこれを流用して、JPAの調査を続けましょ。

といったところで、次回へ続く。

注) 生成したHTMLについては、JSF テンプレートXML その3にも言及があるので、
そちらも参照のこと。

注その2) PostConstruction内にDB参照を行っているが、この処理はあんまり良くない。