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