Skip to content

Instantly share code, notes, and snippets.

@kazz12211
Created August 28, 2017 23:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kazz12211/06b8e40936b4f44520ec0b5584750fe3 to your computer and use it in GitHub Desktop.
Save kazz12211/06b8e40936b4f44520ec0b5584750fe3 to your computer and use it in GitHub Desktop.
AribaWebのAWTDataTableのソート条件等(テーブルの状態)をセッション内で維持する方法

TableConfigManager.java

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をSessionオブジェクトに持たせる

セッションスコープでテーブル状態を保持するのが前提のコード。セッションがタイムアウトしてもテーブル状態を保持したい場合は、何らかのストレージにTableConfigManagerが保持するデータをシリアライズして保存する必要がある。

...
import mypackage.TableConfigManager
...
public class Session extends AWSession {
	...
	private TableConfigManager tableConfigManager = new TableConfigManager();
	...
	...
	public TableConfigManager getTableConfigManager() {
		return tableConfigManager;
	}

}

AWComponentに関連メソッド追加

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バインディングを設定

AWTDataTableはtableConfigバインディングがあるとテーブルの状態が変わったときにその時のテーブル状態をプッシュする。ページ生成のときにプルする。そういう仕組みになっている。

<t:DataTable .... tableConfig="$tableConfig">
...
...
</t:DataTable>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment