Калитка: с PropertyResolver в порядке?

У меня есть объект, и в нескольких компонентах мне нужно сделать два его свойства конкатенированными вместе с разделителем. Если одно из свойств имеет значение null, оно не должно отображать разделитель, а только свойство not null. Если оба имеют значение null, то оно не должно отображаться вообще.

Два свойства доступны таким образом:

thing.getFoo()

а также

thing.getStuff().getBar()

Рендерер будет классом с одним статическим методом, принимающим экземпляр типа вещи, и вернёт строку.

Проблема в том, что кажется уродливым делать так много пустых проверок вещи и результата thing.getStuff(), поэтому мне было интересно, если вместо этого использовать PropertyResolver.

Проблема в том, что Javadoc говорит, что он не является частью Wicket API, и использовать его, только если я знаю, что я делаю. Поэтому я предполагаю, что есть определенные предостережения или проблемы, о которых я должен знать? Если так, то кто они?

1 ответ

В этом случае я бы использовал пользовательскую модель только для чтения. Что-то вроде:

private static class ConcatenatingPropertyModel extends AbstractReadOnlyModel<String> {

    private List<PropertyModel<String>> models = new ArrayList<PropertyModel<String>>();

    public ConcatenatingPropertyModel(Object object, String... props) {
        for (String prop : props) {
            models.add(new PropertyModel<String>(object, prop));
        }   
    }

    @Override
    public String getObject() {
        // iterate over delegate property models and concatenate
    }

    @Override
    public void detach() {
        super.detach();
        for (PropertyModel<String> model : models) {
            model.detach();
        }    
    }
}

Тогда вы можете использовать модель следующим образом:

new ConcatenatingPropertyModel(thing, "foo", "stuff.bar");
Другие вопросы по тегам