JPA + EJB + JSF による Web アプリケーション(その 5)
長らくお待たせいたしました。今回は Java のソースコードを書いていきます。
管理 Bean の作成
JSF では管理 Bean という Bean を作成します。「管理 Bean って何を管理するの ?」と思うかも知れませんが、英語では Managed Bean、つまり「(JSF によって)管理されている Bean」という意味です。
package jp.mydns.akanekodou; import javax.ejb.EJB; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import java.io.Serializable; import java.util.List; import jp.mydns.akanekodou.dao.CityDAO; import jp.mydns.akanekodou.entity.City; @SuppressWarnings("serial") @ManagedBean @SessionScoped public class MajorCity implements Serializable { @EJB private CityDAO dao; private List<City> cities; private City city; @PostConstruct private void init() { cities = dao.all(); } public List<City> getCities() { return cities; } public City getCity() { return city; } public String detail(int id) { city = dao.find(id); return "detail"; } }
JSF 2.0 からは faces-config.xml
をいちいち編集せずともこのようにアノテーションで管理 Bean であることを JSF に教えてあげることができます。煩わしい XML の編集作業から解放されるのは楽ですね。
管理 Bean にはスコープを設定します。特に指定しなければ RequestScoped
になるようです。また今回のように SessionScoped
にする場合は Serializable
を implements
する必要があります。それ以外の部分は基本的に POJO として作成できます。
public String detail(int id) { city = dao.find(id); return "detail"; }
の部分はアクションメソッドと言われる部分で、戻り値は遷移先の View の名前です。自分自身に遷移する場合は空文字列または null
を return
するようにします(2015/03/07 追記 : メソッドの返り値を void
にしても同じ効果が得られるようです)。