我正在尝试为我的p:datatable
使用自定义集合自定义收藏:
public class ManagedArrayList<E> extends java.util.ArrayList<E> {
private static final int DEFAULT_SIZE_LIMIT = 0; //unlimited
private ArrayList<E> internalList;
private int maxSize;
public ManagedArrayList(int maxSize) {
this.maxSize = maxSize;
internalList = new ArrayList<E> ();
}
public ManagedArrayList() {
this(DEFAULT_SIZE_LIMIT);
}
@Override
public boolean add(E objectToAdd){
if(maxSize>0){
if(internalList.size()>maxSize){
throw new IllegalStateException("List is full");
}
}
return internalList.add(objectToAdd);
}
@Override
public E get(int index){
return internalList.get(index);
}
@Override
public E remove(int index){
return internalList.remove(index);
}
@Override
public boolean remove(Object o){
return internalList.remove(o);
}
@Override
public Iterator<E> iterator(){
return internalList.iterator();
}
public List<E> toList(){
return (List)internalList;
}
}
然而,当我按原样使用时,我收到消息:“找不到记录。”
如果我首先将自定义列表转换为<List>
,则可以正常工作。
转换我的清单:
private ManagedArrayList<FragmentTuple> fragments = new ManagedArrayList();
public List<FragmentTuple> getUICompatibleFragments() {
List<FragmentTuple> f = this.fragments.toList();
return f;
}
我会优先直接使用我的自定义集合而无需转换。我在ManagedArrayList的实现中是否缺少某些内容,以便它可以在p:datatable中工作,最好也在ui中重复:repeat
答案 0 :(得分:0)
您忘了覆盖size()
和isEmpty()
方法。此外,您永远不会委托ArrayList
超类,而是保留内部ArrayList
实例。有人会想知道你为什么要从ArrayList
延伸而不是AbstractList
甚至List
,这反过来会自动迫使你实施正确的方法。因此,另一种方法是委派给ArrayList
超类而不是内部实例,以便size()
和isEmpty()
调用“自动”返回正确的值。