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メソッドを削除する修正を行う。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | 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を利用できる。