2012-01-11 11 views
0

にRequestParamとして構成オブジェクトを使用するために私が探しています何を説明するために...何かのような...擬似コードです:最も簡単な方法は、次のように春

// Setters and Getters ommitted to keep the example short here: 
class Address 
{ 
    private String street; 
    private String city; 
} 

class AddressBookEntry 
{ 
    private String name; 
    private Address address; 
} 

class MyController 
{ 
    public void render(@RenderParam AddressBookEntry entry) 
    { 
    ... 
    } 
} 

あなたは(2つのPOJOがある見ることができるようにAddressおよびAddressBookEntry)。今度は、httpリクエストパラメータとしてAddressBookEntryを私のコントローラに渡したいと思います。 URLは次のようになります:/target?entry.name=Random-Guy&entry.address.street=Random-Street&entry.address.city=Random-Cityと思います。

@RenderParamはこのように動作しません。私は、単一の文字列を取り、そこからターゲットオブジェクトを構築するPropertyEditorを作成する必要があります。つまり、各(サブ)プロパティに対して個別のURL-paramを持つことはできません。

@ModelAttributeが近づいていますが、オブジェクトのネストがこのアノテーションで動作するかどうか、どのようにヒントを見つけることができませんでした。さらに、この注釈は「エントリ」なしで機能します。私のURLのプレフィックスは、プロパティ名を共有する複数のModelAttributesを持っていないことを確認する必要があることを意味します。それはストレスがかかるように聞こえる。

どうすればこの問題を解決できますか?

答えて

1

@ModelAttributeを使用する必要がある状況です。ネストされたオブジェクトは、必要に応じてサポートされています。

複数@ModelAttributeのが必要な場合は、特別なクラス(パラメータ名が同じになるようにクラスは、タイプAddressBookEntryentryという名前のフィールドを含めることができますたとえば、それはあなたの場合)にそれらを構成することができます。

+0

私はドキュメントでそれを忘れていたのですか?とにかく、ありがとう、作品:-)。 – yankee

+0

@yankee:基本的なデータバインディング機能が文書化されています[こちら](http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/validation.html#beans-beans-conventions)彼らは '@ ModelAttribute'が同じデータバインディング機能を使用していることを忘れていました。 – axtavt

+0

@axtavt私のモデル構造はOPのものと同じですが、2つの '@ ModelAttributes'(AddressBookEntryに1つとAddressに1つ)を使用する必要があります。 1つの@ModelAttributeを使ってそれを行う方法はありますか? PS:アドレスはAddressBookEntryに埋め込まれています。 –

関連する問題