2011-07-05 9 views
1

バインディングは、私はCountryクラスのようなものに見えるデータは、多くのエンド協会

のインスタンスにHTTPパラメータをデータバインドするとします既に存在し、以下を使用して取得することができるCountryのインスタンス:

これを行う簡単な方法は、国のIDを対応するCountryインスタンスに変換できるPropertyEditorを定義することです。

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() 
    } 
} 

代わりに私は、HTTP(配列パラメータ)に送られ

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

のインスタンスと国のIDをデータバインドします。 Collection<Country>を簡単にバインドする方法はありますか?別のPropertyEditorを定義することによって?

+0

なぜあなたは大陸ではなく、コレクションにバインドしますか?あなたは国のリストの代わりに大陸のidにバインドしたいと思いますか?右? –

+0

この例では、ユーザーが新しい大陸を作成できると仮定できますが、大陸には既に作成された国のみが含まれている場合があります。 –

+0

国コードをカンマ区切りにして読み込むことはできませんか?それぞれがキャッシュされている場合や、単一行のSQLステートメントを使用している場合は、1つの要求ですべてをロードできるはずです。あなたは何か簡単なものを探していますか? –

答えて

0

PropertyEditorsは、文字列< - > objectのラッパーのみです。自分のデータのマーシャリングとマーシャリング解除を行う必要があります。ちょうどあなたが上記の国のためにしたように。

私は

Collection<Country> getCountries(int[] id)

は、あなたのサービスを分割して使用するようなPropertyEditorを使用しないサービスを作成します。私はあなたがより良い解決策を見つけるとは思わない。

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