1

假设我想将 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可以将国家/地区的 ID 转换为相应Country实例的 a,例如

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
}

国家的 ID 在 HTTP(数组参数)中发送。有没有简单的方法来绑定Collection<Country>,例如通过定义另一个PropertyEditor

4

1 回答 1

0

PropertyEditor 只是 String <-> 对象的包装器。您将不得不自己进行数据的编组和解组。就像您在上面为 Country 所做的一样。

我会创建一个服务

Collection<Country> getCountries(int[] id)

然后使用 PropertyEditor 拆分和使用您的服务。我不认为你会找到更好的解决方案。你可以做类似的事情

  void setAsText(String paramValue) {
        ids = param.split(",")
        // make each id an int
        value = service.getCountries(ids)
    }
于 2011-07-05T15:14:14.473 回答