Wicket hacked use of ListView, which alternatives?

Wicket use of models can be cumbersome. For a stateful page to properly render an object, you need to use lots of boiler-plate code, overriding classes to properly get the visibility status, etc… A simple example:

private IModel<FooBar> fooBarModel;
public MyPage() {
    Label lbl1 = new Label("field1",
               new PropertyModel<>(fooBarModel, "field1")) {
        @Override public boolean isVisible() {
             return fooBarModel.getObject().someCondition();
    }   }
    add(lbl1);
    /// Etc... same for dozen of other fields
}

I’m often using a trick using a ListView to help. Same example:

public MyPage() {
    add(new ListView<FooBar>("content",
                new SingleListModel<FooBar>(fooBarModel)) {
        @Override protected void populateItem(...) {
            FooBar fooBar = item.getModelObject();
            // Code here gets simpler:
            Label lbl1 = new Label("field1", fooBar.getField1());
            lbl1.setVisible(fooBar.someCondition());
            item.add(lbl1);
            // Etc...
        }
    });
}

With a simple utility class SingleListModel, that transform a IModel<T> to a ListModel<T>, having 1 or 0 elements, depending whether T is null or not:

public class SingleListModel<T>
extends LoadableDetachableModel<List<T>> {
    private IModel<T> tModel;
    public SingleListModel(IModel<T> tModel) {
        this.tModel = tModel;
    }
    @Override
    protected List<T> load() {
        List<T> ret = new ArrayList<>(1);
        T t = tModel.getObject();
        if (t != null)
            ret.add(tModel.getObject());
        return ret;
    }
}

The nice side-effect of this is that the whole “content” element in the markup is hidden if fooBarModel returns null; no special treatment needed.

But all this smells like a hack to me, as I use ListView in a somehow “unnatural” fashion.

Is there a cleaner way to get the same result? A standard wicket framework?