JPA + EJB + JSF による Web アプリケーション(その 7)
前回の続きです。
管理 Bean の作成
package jp.mydns.akanekodou; import javax.faces.bean.ManagedBean; import javax.annotation.PostConstruct; import javax.ejb.EJB; import java.util.List; import jp.mydns.akanekodou.dao.EmployeeDAO; import jp.mydns.akanekodou.entity.Employee; @ManagedBean public class EmployeeList { @EJB private EmployeeDAO dao; private List<Employee> items; @PostConstruct private void init() { items = dao.all(); } public List<Employee> getItems() { return items; } }
構造は CustomerList
と同じで、コンポーネント用のプロパティはありません。
Facelets の作成
新たに employee/list.xhtml として作成します。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets"> <h:head> <title>担当者マスタ一覧</title> </h:head> <h:body> <h:dataTable var="item" value="#{employeeList.items}" border="1"> <h:column> <f:facet name="header">担当者名</f:facet> <h:outputText value="#{item.name}" /> </h:column> <h:column> <f:facet name="header">性別</f:facet> <h:panelGroup> <ui:fragment rendered="#{item.sex == 1}">男性</ui:fragment> <ui:fragment rendered="#{item.sex == 0}">女性</ui:fragment> </h:panelGroup> </h:column> <h:column> <f:facet name="header">上司名</f:facet> <h:outputText value="#{item.manager.name}" /> </h:column> </h:dataTable> </h:body> </html>
今回は担当者名と性別、および直属の上司の名前を一覧で表示させてみたいと思います。性別のところに見慣れないタグがありますね。この ui:fragment
は rendered
属性(この値が true
ならレンダリングされ、false
ならレンダリングされない)を使って条件分岐をさせるために使っています。担当者マスタテーブルには性別は「男性なら 1、女性なら 0」という整数値で入力されているので、それを EL 式で判別して「男性」ないし「女性」という文字列に変換して出力させます。このように、JSF の EL 式でも比較演算子が使用できます。