This Project Has Not Released Any Files
ListDataProviderのmodel()メソッドは、毎回新しいModelインスタンスを作成します。そのため、GridViewやDataViewにsetにおいてsetItemReuseStrategy(ReuseIfModelsEqualStrategy.getInstance())を呼び出しても、Modelが毎回異なるため、Itemの再利用が行われません。
次のようにListDataProviderを拡張すれば、同じModelインスタンスが使われるでしょう。
- public class ReuseModelListDataProvider<T extends Serializable> extends ListDataProvider<T>{
- private static final long serialVersionUID = -4848228362992249051L;
- Map<T, IModel<T>> modelMap = new HashMap<T, IModel<T>>();
- public ReuseModelListDataProvider(List<T> list) {
- super(list);
- }
- @Override
- public IModel<T> model(T object) {
- IModel<T> model = modelMap.get(object);
- if(model == null) {
- model = new Model<T>(object);
- modelMap.put(object, model);
- }
- return model;
- }
- /**
- * Modelのキャッシュを破棄するときにはこれを呼ぶ
- */
- public void clearModelCache() {
- modelMap = new HashMap<T, IModel<T>>();
- }
- }