2012-04-20 8 views
0

私はこの問題に関して私のシステムに関して苦労しています。私は構造の複雑なフォームを使用しています:クラスDetailVOと複雑なデータ形式のSpringデータバインディング(Listメンバーを持つオブジェクトのハッシュマップ)

class MyForm implements Serializable 
{ 


    private Map<String, DetailVO> details; 
     <with getters and setters> 

... 
} 

class DetailVO 
{ 
... 
    private List<LocationSiteVO> locationSites; 
    <with getters and setters> 
.... 
} 

class LocationSiteVO 
{ 
... 
    private boolean field1; 
... 
<with getters and setters> 
} 

起こる何回(ほとんどの場合)があるある

<form:hidden path="details[${detailEntry.key}].locationSites[${locStatus.index}].locationId" /> 
... 

はその後、私は、フォームオブジェクトが持っていますそのバインディングはLocationSiteVO.field1値で特に機能しません。デバッグを行うと、フォーム(UI)からコントローラー(LocationSiteVO自体をバインドすることを意味する)に正しく渡されますが、DetailVOレベルには渡されません。 誰かがこの問題を抱えている場合は、解決方法を教えてください。

ありがとうございます!

答えて

0

あなたのクラスDetailVoとLocationSiteVOもSerializableを実装する必要があると思います。 それでも、まだ動作しない場合は、Converterをいくつか作ってください。

編集:申し訳ありませんが、私はあなたのケースではコンバータが役に立たないと思います。オブジェクトがすでに存在しているときにオブジェクトを検索します。あなたがパスを変更しようとすることができる短所で :

$ {詳細[detailEntry.key] .locationSitesは[locStatus.index] .locationId}

+0

DetailVO&LocationSiteVOは、両方の直列化されています。問題は、DetailVOのLocationSiteVOをバインドすることです。コンバータでそれがどのように解決されるか詳しく説明できますか? – user1346699

+0

パスを変更する場合:java.lang.IllegalArgumentExceptionが発生しました: 'path'が空であってはなりません – user1346699

+0

私は最終的に私の問題を解決します。 locationSitesは各詳細エントリの1つのオブジェクトのみを参照していることが判明しました。そのため、バインディングはlocationSitesの1つのコピーのみを更新しています。 – user1346699

関連する問題