Калитка: с 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");