JakartaEE(JavaEE)

Eclipse上のJSFプロジェクトでlombokを利用してみた

lombokというライブラリを使うと、JavaBeanクラスにおいて、アノテーション付与するだけで、getterメソッド・setterメソッドを利用することができるため、JavaBeanクラスのソースコードを大幅に短くすることができる。

今回は、Eclipse上のJSFプロジェクトでlombokを利用してみたので、その手順とサンプルプログラムを共有する。

前提条件

以下の記事の実装が完了していること。

JSFプロジェクトで複数画面をもつWebアプリケーションを作成してみたJSF(JavaServer Faces)プロジェクトを利用して、JavaベースのWebアプリケーションを作成することができる。 ...

lombokの導入と実装

Eclipse上のJSFプロジェクトで、lombokを利用するための手順とサンプルプログラム・実行結果は、以下の通り。

1) Eclipseが起動している場合は終了する。

2) lombok-(バージョン).jarファイルを探し、ダブルクリックする。

下図の場合、「C:\Users\(ユーザー名)\.gradle\caches\modules-(X)\files-(X.X)」下に、Gradleでダウンロードされたファイルが配置されているので、そこから「lombok-(バージョン).jar」を探している。
lombokの導入_2_1

あるいは、下記サイトから「lombok.jar」を取得してもよい。
https://projectlombok.org/download

lombokの導入_2_2

3) 上記「lombok-1.18.10.jar」をダブルクリックすると、下記ダイアログが出るため「OK」ボタンを押下する。
lombokの導入_3

4)「Specify location …」ボタンを押下し、Eclipseの起動exe(eclipse.exe)を選択する。
lombokの導入_4_1

lombokの導入_4_2

5)「IDEs」に先ほど設定したexeファイルが選択されていることを確認後、「Install / Update」ボタンを押下する。
lombokの導入_5

6) インストールが完了すると、下記ダイアログが表示されるので、「Quit Installer」を押下する。
lombokの導入_6

7) 以下のように、「eclipse.ini」の最終行に「-javaagent:C:\work\pleiades\pleiades\eclipse\lombok.jar」が追記され、「lombok.jar」が追加されていることが確認できる。
lombokの導入_7_1

lombokの導入_7_2

8) JSFプロジェクトを作成済のEclipseを起動し、プロジェクトを選択し右クリックし、「ビルド・パス」から「外部アーカイブの追加」を選択する。
lombokの導入_8

9) 7)で追加された「lombok.jar」を選択し、「開く」ボタンを押下する。
lombokの導入_9

10) 以下のように、「参照ライブラリー」に「lombok.jar」が追加されていることが確認できる。
lombokの導入_10

11) 以下のように、lombokのクラスをインポートできることが確認できる。
lombokの導入_11



12) InputFormActionクラスを、以下のように、@Data、@ToStringアノテーションを付与し、Getter/Setter/toStringメソッドを削除する修正を行う。

package faces;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.enterprise.context.SessionScoped;
import javax.faces.model.SelectItem;
import javax.inject.Named;

import common.CommonUtil;
import lombok.Data;
import lombok.ToString;

/**
 * 画面のフォーム値と画面遷移メソッドを定義.
 */
// @Namedアノテーションは、JSFのXHTMLファイルから#{inputFormAction}で
// Javaクラスを参照できるようにしている(→バッキングビーン)
// @SessionScopedアノテーションは、このバッキングビーンの生存期間を
// セッションに設定している
@Named(value="inputFormAction")
@SessionScoped

// 以下はLombokのアノテーション
//「@Data」アノテーションを付与すると、このクラス内の全フィールドに対する
// Getterメソッド・Setterメソッドにアクセスができる
@Data
//「@ToString」アノテーションを用いて、exclude属性で指定した項目以外の値を、
// toStringメソッド呼出時に出力することができる
@ToString(exclude={"birthMonthItems","birthDayItems","sexItems"})
public class InputFormAction implements Serializable {

    // シリアルバージョンUID
    private static final long serialVersionUID = 7283339629129432007L;

    /** 名前 */
    private String name;

    /** 生年月日_年 */
    private String birthYear;

    /** 生年月日_月 */
    private String birthMonth;

    /** 生年月日_日 */
    private String birthDay;

    /** 性別 */
    private String sex;

    /** 性別(ラベル) */
    private String sexLabel;

    /** メモ */
    private String memo;

    /** 確認チェック */
    private String checked;

    /** 生年月日_月(選択リスト) */
    private List<SelectItem> birthMonthItems;

    /** 生年月日_日(選択リスト) */
    private List<SelectItem> birthDayItems;

    /** 性別(選択リスト) */
    private List<SelectItem> sexItems;

    /**
     * コンストラクタ生成時に選択リストの値を設定.
     */
    public InputFormAction(){
        // 生年月日_月(選択リスト)
        birthMonthItems = new ArrayList<SelectItem>();
        birthMonthItems.add(new SelectItem("", ""));
        for(Integer i = 1; i <= 12; i++){
            birthMonthItems.add(new SelectItem(String.valueOf(i), String.valueOf(i)));
        }

        // 生年月日_日(選択リスト)
        birthDayItems = new ArrayList<SelectItem>();
        birthDayItems.add(new SelectItem("", ""));
        for(Integer i = 1; i <= 31; i++){
            birthDayItems.add(new SelectItem(String.valueOf(i), String.valueOf(i)));
        }

        // 性別(選択リスト)
        sexItems = new ArrayList<SelectItem>();
        sexItems.add(new SelectItem(String.valueOf(1),"男"));
        sexItems.add(new SelectItem(String.valueOf(2),"女"));
    }

    /**
     * 確認画面への遷移.
     * @return 確認画面へのパス
     */
    public String confirm(){
        // 性別(ラベル)を設定
        if(!CommonUtil.isBlank(sex)){
        	this.setSexLabel(this.getSexItems().get(
                    Integer.parseInt(this.getSex())-1).getLabel());
        }
        // Formに設定された値を出力
        System.out.println(this.toString());

        // 確認画面に遷移、ただし、遷移先URLを正しく表示し画面遷移を安定させるため、
        // ?faces-redirect=trueを付与し、フォワードからリダイレクトに変更している
        return "confirm.xhtml?faces-redirect=true";
    }

    /**
     * 入力画面に戻る.
     * @return 入力画面へのパス
     */
    public String back(){
    	// 入力画面に戻る
        return "input.xhtml?faces-redirect=true";
    }

    /**
     * 完了画面への遷移.
     * @return 完了画面へのパス
     */
    public String send(){
    	// 確認画面に表示された値を出力
        System.out.println(this.toString());

        // 完了画面に遷移
        return "complete.xhtml?faces-redirect=true";
    }

}

13) 実行結果は、以下の記事の「サンプルプログラムの実行結果」と同じ結果となる。

JSFプロジェクトで複数画面をもつWebアプリケーションを作成してみたJSF(JavaServer Faces)プロジェクトを利用して、JavaベースのWebアプリケーションを作成することができる。 ...

コンソールログ出力例は以下の通りで、上記記事と同等の内容が出力されていることが確認できる。
lombokの導入_13

要点まとめ

  • lombokというライブラリを使うと、JavaBeanクラスにおいて、アノテーション付与するだけで、getterメソッド・setterメソッドを利用することができるため、JavaBeanクラスのソースコードを大幅に短くすることができる。
  • あらかじめEclipse上にlombokをインストールしておくことで、Eclipse上でlombokを利用できる。