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
安直ではあるが、これでVIEWも完成。
登録、削除機能を作る下地もできたので、
以後はこれを流用して、JPAの調査を続けましょ。
といったところで、次回へ続く。
注) 生成したHTMLについては、JSF テンプレートXML その3にも言及があるので、
そちらも参照のこと。
注その2) PostConstruction内にDB参照を行っているが、この処理はあんまり良くない。