2016-10-09 8 views
0

私は、次の形式のモデルがあります:Javaの春FormFactory.form

ReservationLockRequestForm:

public class ReservationLockRequestForm { 
    private Restaurant restaurant; 
    private ReservationInquiryResponse reservationData; 
    private Time reservationTime; 
} 

私は読みやすさのためにゲッター、セッターと空のコンストラクタを除外します。今

、私はこの

formFactory.form(ReservationLockRequestForm.class).bindFromRequest().get() 

を呼び出す場合、私は

Invalid property 'restaurant[tables][1][numberOfChairs]' of bean class [models.helpers.forms.ReservationLockRequestForm]: Illegal attempt to get property 'restaurant' threw exception 

RestaurantモデルList<Tables>オブジェクトが含まれ得る、とTablesモデルがnumberOfChairsプロパティが含まれていません。

私は間違っていますか?

EDIT:(すべてのプロパティがnullである)着信Restaurantオブジェクトが空であることをReservationLockRequestFormRestataurant Setter凝るにブレークポイントを追加するが、要求の迅速なチェックが、それは、すべてのデータが含まれていることを凝ります。

答えて

0

わかりました。 Front-EndがリクエストをJSONではなくForm-Dataとして送信していたことが判明しました。私はそれを変更し、バックエンドに何の修正も加えずに完璧に働いた。

0

カスタムプロパティエディタが必要です。 PropertyEditorSupportに拡張されたクラスが必要です。 RestaurantPropertyEditor extends PropertyEditorSupportは、レストランの変換、またはフィールドとテキスト表現の変換を行います。 setAsTextgetAsTextを上書きする必要があります。

次にビューを返しますあなたのコントローラでは、あなたが行う必要があります、多くの場合、あなたのPropertyEditorは、エンティティとその逆に、IDから変換するために、あなたのDAOが必要になります

@InitBinder("reservationLockRequestForm ") 
public void initBinder(WebDataBinder binder) 
{ 
    binder.registerCustomEditor(Restaurant .class, new RestaurantPropertyEditor()); 
    // ... other ones too 
} 

を持っている必要がありますこのすべてあなた自身。

エンティティで直接Spring Bindingを使用しないで、POST/getからリクエストパラメータを手動で処理しない方が簡単な場合があります。そのことを念頭に置いておきますが、これはコレクションであるパラメータを扱う場合に当てはまります。

関連する問題