2011-12-16 2 views
0

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

Оба свойства доступны следующим образом:

thing.getFoo() 

и

thing.getStuff().getBar() 

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

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

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

ответ

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"); 
Смежные вопросы