Java 在p:datatable中使用自定义集合
我正在尝试为我的p:datatable使用自定义集合 自定义集合:Java 在p:datatable中使用自定义集合,java,jsf-2,primefaces,Java,Jsf 2,Primefaces,我正在尝试为我的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 Manage
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;
}
}
然而,当我按原样使用它时,我得到的信息是:找不到任何记录。
如果我将我的自定义列表转换为第一个,它就可以正常工作。
转换我的列表:
private ManagedArrayList<FragmentTuple> fragments = new ManagedArrayList();
public List<FragmentTuple> getUICompatibleFragments() {
List<FragmentTuple> f = this.fragments.toList();
return f;
}
我更愿意直接使用我的自定义集合,而不必转换。在我的ManagedArrayList实现中是否缺少一些东西,以便它可以在p:datatable中工作,最好在ui:repeat中也可以工作。您忘了覆盖其他方法和方法。此外,您永远不会委托给ArrayList超类,而是保留一个内部ArrayList实例。人们可能会想,为什么要从ArrayList扩展,而不是甚至扩展,这反过来会自动迫使您实现正确的方法。因此,另一种选择是委托给ArrayList超类,而不是内部实例,这样size和isEmpty调用将自动返回正确的值。Hi感谢您的提示。如何委托给超类?我最终添加了公共int size{return internalList.size;}public boolean isEmpty{return internalList.isEmpty;}并扩展了AbstractList而不是ArrayList。现在一切正常,谢谢。至于授权给super,只需将internalList.xxx替换为super.xxx,并去掉整个字段。