Wicket: С PropertyResolver все в порядке? - PullRequest
0 голосов
/ 16 декабря 2011

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

Доступ к двум свойствам осуществляется следующим образом:

thing.getFoo()

и

thing.getStuff().getBar()

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

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

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

1 Ответ

1 голос
/ 18 декабря 2011

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

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");
...