Связывание данных многогранные ассоциации - PullRequest
1 голос
/ 05 июля 2011

Предположим, я хочу привязать параметры HTTP к экземпляру

class Continent {
  Integer id
  String name
  Country country
}

, где класс Country выглядит примерно так:

class Country {
  Integer id
  String name
  Currency currency
  // other properties
}

Если я хочу связать Continent.countryк экземпляру Country, который уже существует и может быть получен с помощью:

interface CountryService {
  Country get(Integer countryId)
}

Простой способ сделать это - определить PropertyEditor, который может преобразовать идентификатор страны в соответствующий ответ Countryнапример,

public class ProductTypeEditor extends PropertyEditorSupport {

    CountryService countryService // set this via dependency injection

    void setAsText(String paramValue) {
        if (paramValue) 
            value = countryService.get(paramValue.toInteger())
    }

    public String getAsText() {
        value?.id.toString()
    }
}

Если вместо этого я хочу привязать данные к экземпляру

class Continent {
  Integer id
  String name
  Collection<Country> countries
}

, а идентификаторы стран отправляются в HTTP (параметр массива).Есть ли простой способ связать Collection<Country>, например, определив другой PropertyEditor?

1 Ответ

0 голосов
/ 05 июля 2011

PropertyEditors - это только оболочки вокруг объекта String <->.Вам придется делать маршалинг и демаршализацию данных самостоятельно.Так же, как вы сделали выше для страны.

Я бы создал службу, которая выполняет

Collection<Country> getCountries(int[] id)

, а затем использовал PropertyEditor для разделения и использования вашего сервиса.Я не думаю, что вы найдете лучшее решение.Вы можете сделать что-то вроде

  void setAsText(String paramValue) {
        ids = param.split(",")
        // make each id an int
        value = service.getCountries(ids)
    }
...