Wicket: ListView - skipping element

Is it possible to skip an element in populateItem() ? for example by installing something on an element component or something else.

 ListView view = new ListView("quickLinks", quickLinks) { @Override protected void populateItem( ListItem item ){ if( item.getModel(). /*something*/ ) item.skip() } }; 

thanks

+4
source share
3 answers

You can override the iterator() method in your ListView to only repeat the item you want to display.

+1
source

I would rather filter my model instead of checking if / else in the view.

This abstract class is used here:

 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); } 

Now include your list model in it:

 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 } }; 
+10
source

Does item.setVisible(false) not work?

+2
source

Source: https://habr.com/ru/post/1334325/


All Articles