lombokというライブラリを使うと、JavaBeanクラスにおいて、アノテーション付与するだけで、getterメソッド・setterメソッドを利用することができるため、JavaBeanクラスのソースコードを大幅に短くすることができる。
今回は、Eclipse上のJSFプロジェクトでlombokを利用してみたので、その手順とサンプルプログラムを共有する。
前提条件
以下の記事の実装が完了していること。
lombokの導入と実装
Eclipse上のJSFプロジェクトで、lombokを利用するための手順とサンプルプログラム・実行結果は、以下の通り。
1) Eclipseが起動している場合は終了する。
2) lombok-(バージョン).jarファイルを探し、ダブルクリックする。
下図の場合、「C:\Users\(ユーザー名)\.gradle\caches\modules-(X)\files-(X.X)」下に、Gradleでダウンロードされたファイルが配置されているので、そこから「lombok-(バージョン).jar」を探している。
あるいは、下記サイトから「lombok.jar」を取得してもよい。
https://projectlombok.org/download
3) 上記「lombok-1.18.10.jar」をダブルクリックすると、下記ダイアログが出るため「OK」ボタンを押下する。
4)「Specify location …」ボタンを押下し、Eclipseの起動exe(eclipse.exe)を選択する。
5)「IDEs」に先ほど設定したexeファイルが選択されていることを確認後、「Install / Update」ボタンを押下する。
6) インストールが完了すると、下記ダイアログが表示されるので、「Quit Installer」を押下する。
7) 以下のように、「eclipse.ini」の最終行に「-javaagent:C:\work\pleiades\pleiades\eclipse\lombok.jar」が追記され、「lombok.jar」が追加されていることが確認できる。
8) JSFプロジェクトを作成済のEclipseを起動し、プロジェクトを選択し右クリックし、「ビルド・パス」から「外部アーカイブの追加」を選択する。
9) 7)で追加された「lombok.jar」を選択し、「開く」ボタンを押下する。
10) 以下のように、「参照ライブラリー」に「lombok.jar」が追加されていることが確認できる。
11) 以下のように、lombokのクラスをインポートできることが確認できる。
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) 実行結果は、以下の記事の「サンプルプログラムの実行結果」と同じ結果となる。
コンソールログ出力例は以下の通りで、上記記事と同等の内容が出力されていることが確認できる。
要点まとめ
- lombokというライブラリを使うと、JavaBeanクラスにおいて、アノテーション付与するだけで、getterメソッド・setterメソッドを利用することができるため、JavaBeanクラスのソースコードを大幅に短くすることができる。
- あらかじめEclipse上にlombokをインストールしておくことで、Eclipse上でlombokを利用できる。