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:fragmentrendered 属性(この値が true ならレンダリングされ、false ならレンダリングされない)を使って条件分岐をさせるために使っています。担当者マスタテーブルには性別は「男性なら 1、女性なら 0」という整数値で入力されているので、それを EL 式で判別して「男性」ないし「女性」という文字列に変換して出力させます。このように、JSF の EL 式でも比較演算子が使用できます。

表示させてみる


こんな感じになったでしょうか ?

2013/10/22 追記 : ui:fragment を使って書いたところは h:outputText を使って

<h:outputText value="#{item.sex == 0 ? '女性' : '男性'}">

と書くこともできる(この例では性別が男性か女性かしかないので)。まぁ今回は ui:fragmentの使い方の練習ということで。