Java Wicket:ListView-跳过项目
是否可以跳过Java Wicket:ListView-跳过项目,java,listview,wicket,Java,Listview,Wicket,是否可以跳过populateItem()中的项目?e、 g.通过在项目组件上设置某些内容,或其他方式 ListView view = new ListView("quickLinks", quickLinks) { @Override protected void populateItem( ListItem item ){ if( item.getModel(). /*something*/ ) item.skip()
populateItem()
中的项目?e、 g.通过在项目组件上设置某些内容,或其他方式
ListView view = new ListView("quickLinks", quickLinks) {
@Override
protected void populateItem( ListItem item ){
if( item.getModel(). /*something*/ )
item.skip()
}
};
谢谢您可以覆盖
列表视图中的方法
,以便只迭代您希望呈现的项目。我更喜欢筛选我的模型,而不是在视图中执行if/else检查
在这里,使用这个抽象类:
public abstract class FilteredListModel<K> extends LoadableDetachableModel<List<K>>{
private static final long serialVersionUID = 1L;
private IModel<List<? extends K>> inner;
@Override
protected void onDetach(){
inner.detach();
}
public FilteredListModel(IModel<List<? extends K>> inner){
this.inner = inner;
}
public FilteredListModel(List<? extends K> inner){
this.inner = Model.ofList(inner);
}
@Override
protected final List<K> load(){
List<? extends K> input = inner.getObject();
List<K> result = new ArrayList<K>(input.size());
for(K k : input){
if(accept(k))result.add(k);
}
return result;
}
protected abstract boolean accept(K k);
}
公共抽象类FilteredListModel扩展了LoadableDetachableModel{
私有静态最终长serialVersionUID=1L;
私有IModel无法item.setVisible(false)
work?我无法再次找到这些信息,但我隐约记得Wicket 1.5将为ListView
s等+1合并一个更通用的呈现/迭代模型,但实现迭代器是困难的。如果您愿意,我建议您使用一些帮助器方法,如s或类似的方法,这是可靠的吗?我的意思是,Wicket永远不会以其他方式访问项目?@OndraŽIžka我不确定Wicket是否能保证这一点。如果不这样做,您是在视图上过滤,而不是在modelSure上过滤,但您仍然必须在项目内创建组件(否则Java树与HTML树不匹配)。我不想创建永远不会使用的组件。但这只是服务器上的短期内存。html不会被呈现-或者我错了吗?是的,但我从后端提供了一个列表,其中包含各种混合类型的实体,随着时间的推移可能会被添加。我的组件只能呈现其中的一些。我知道,不是quite很好,但后端对我来说就是这样。这确实有效,而且您不必在调用后创建层次结构,wicket不会抱怨。我认为这是最简单和首选的方法。很好,我想我会在我的wicket 1.4应用程序中使用它。谢谢!很好的解决方案-也是通用的-直接用于我的Utils;)
ListView<String> view = new ListView<String>(
"quickLinks",
new FilteredListModel<String>(quickLinks){
protected boolean accept(String value){
return yourCheckHere();
}
}) {
@Override
protected void populateItem( ListItem<String> item ){
// no ifs here
}
};