7. ライフサイクルイベントの管理
読み込みと書き込み処理の前、後それぞれのライフサイクルのイベントにおいて、任意の処理を呼び出すことができます。
実装方法として、JavaBeanに直接処理を実装する方法と、リスナークラスを指定して別のクラスで実装する方法の2種類があります。
publicメソッドに付与 する必要があります。
アノテーション |
説明 |
---|---|
|
シートの値の読み込み直前に実行されます。
|
|
シートの値の読み込み後に実行されます。
シート内の全ての値の読み込み後に実行されます。
|
|
オブジェクトの書き込み直前に実行されます。 |
|
オブジェクトの書き込み後に実行されます。
シート内の全ての値の書き込み後に実行されます。
|
また、特定の引数をとることができます。
引数は、とらなくても可能です。
引数の順番は任意で指定可能です。
指定可能な引数のタイプ |
説明 |
---|---|
|
処理対象のSheetオブジェクト。
|
|
|
|
シートのエラー情報 を格納するオブジェクト。
読み込み時に引数で渡したオブジェクト。
|
処理対象のBeanクラス |
処理対象のBeanオブジェクト。 [ver1.3+]
|
|
処理対象のBeanオブジェクト。 [ver1.3+]
|
以下のような時にライフサイクルコールバック関数を利用します。
読み込み前、書き込み前のフィールドの初期化。
読み込み後の入力値の検証。
書き込み後の本ライブラリで提供されない機能の補完。
例えば、Excelファイル上の定義された名前の範囲の変更や入力規則の設定。
7.1. JavaBeanクラスに実装する場合
シート用クラス、レコード用クラスのどちらにも定義できます。
実行順は、親であるシートクラスの処理が先に処理されます。
1// シートクラス
2@XlsSheet(name="Users")
3public class SampleSheet {
4
5 @XlsHorizontalRecords(tableLabel="ユーザ一覧")
6 private List<UserRecord> records;
7
8 @XlsPreLoad
9 @XlsPreSave
10 public void onInit() {
11 // 読み込み前と書き込み前に実行される処理
12 }
13}
14
15// レコードクラス
16public class UserRecord {
17
18 @XlsColumn(columnName="ID")
19 private int id;
20
21 @XlsColumn(columnName="名前")
22 private String name;
23
24 @XlsPostLoad
25 public void onPostLoad(Sheet sheet, Configuration config, SheetBindingErrors errors) {
26 // 読み込み後に実行される処理
27 // 入力値チェックなどを行う
28 }
29
30}
7.2. リスナークラスに実装する場合
クラスにアノテーション @XlsListener
を付与し、属性 value
で処理が実装されたクラスを指定します。 [ver1.0+]
指定したリスナークラスのインスタンスは、システム設定「beanFactory」経由で作成されるため、SpringFrameworkのコンテナからインスタンスを取得 することもできます。
1// シートクラス
2@XlsSheet(name="Users")
3@XlsListener(SampleSheetListener.class)
4public class SampleSheet {
5
6 @XlsHorizontalRecords(tableLabel="ユーザ一覧")
7 private List<UserRecord> records;
8
9}
10
11// SampleSheetクラスのリスナー
12public static class SampleSheetListener {
13
14 @XlsPreLoad
15 @XlsPreSave
16 public void onInit(SampleSheet targetObj) {
17 // 読み込み前と書き込み前に実行される処理
18 }
19}
20
21// レコードクラス
22@XlsListener(UserRecordListener.class)
23public class UserRecord {
24
25 @XlsColumn(columnName="ID")
26 private int id;
27
28 @XlsColumn(columnName="名前")
29 private String name;
30
31}
32
33// UserRecordクラスのリスナー
34public static class UserRecordListener {
35
36 @XlsPostLoad
37 public void onPostLoad(UserRecord targetObj, Sheet sheet, Configuration config, SheetBindingErrors errors) {
38 // 読み込み後に実行される処理
39 // 入力値チェックなどを行う
40 }
41}