AWTDataTableの状態を保持するクラスを用意する。
public class TableConfigManager {
// ページ単位にテーブルの状態を保持する
private Map<String, Map<String, Object>> configs = MapUtil.map();
public TableConfigManager() {
}
public Map<String, Object> get(String tableName) {
Map<String, Object> config = configs.get(tableName);
if(config == null) {
config = MapUtil.map();
configs.put(tableName, config);
}
return config;
}
public void set(String tableName, Map<String, Object> config) {
configs.put(tableName, config);
}
}
セッションスコープでテーブル状態を保持するのが前提のコード。セッションがタイムアウトしてもテーブル状態を保持したい場合は、何らかのストレージにTableConfigManagerが保持するデータをシリアライズして保存する必要がある。
...
import mypackage.TableConfigManager
...
public class Session extends AWSession {
...
private TableConfigManager tableConfigManager = new TableConfigManager();
...
...
public TableConfigManager getTableConfigManager() {
return tableConfigManager;
}
}
TableConfigManagerからページ名でテーブル状態をゲットあるはセットするメソッドを追加する。
public class MyPageWithDataTable extends AWComponent {
...
...
public Map<String, Object> getTableConfig() {
TableConfigManager mgr = (TableConfigManager) session().getFieldValue("tableConfigManager");
return mgr.get(this.name());
}
public void setTableConfig(Map<String, Object> config) {
TableConfigManager mgr = (TableConfigManager) session().getFieldValue("tableConfigManager");
return mgr.set(this.name(), config);
}
}
AWTDataTableはtableConfigバインディングがあるとテーブルの状態が変わったときにその時のテーブル状態をプッシュする。ページ生成のときにプルする。そういう仕組みになっている。
<t:DataTable .... tableConfig="$tableConfig">
...
...
</t:DataTable>