2011-07-25 3 views
4

私はスプリングフォームをコマンドオブジェクトのセットでバインドしようとしています。スプリングフォームでセットをバインドします。

JSPで
private Set<BParameter> bParameters = new HashSet<BParameter>(); 

として設定され、私が定義されてAInstance私のコマンドクラスで私は非常に多くの分野があるかもしれないそのJavaの設定として

<form:input path="bParameters " /> 
<form:input path="bParameters " /> 

としてそれをバインドします。私はこのフォームを送信すると、私はセットを取得しようとした:

Set<BParameter> bParameters = aInstance.getBParameters(); 

私はは0サイズでを設定しました。

私も

<form:input path="bParameters[${itemsRow.index}].bParmvalues[0].parmValue" /> 

としてバインドしようとしましたが、私は、バインディングに問題は何例外

Invalid property 'bParameters[0]' of bean class 

を得ましたか。

答えて

1

コントローラのリストを使用します。

は、ビューでは、このストレートのhtml(これは春タグで動作するかどうかわからない)を使用することができます。

<input name="bParameters[{idx}].bParmvalues[0].parmValue" /> 
+1

コントローラでSet <>の代わりにList <>を使用します。問題が解決しました。 –

+0

これは回避策に似ています。フォームを使用してJPAオブジェクトを直接操作する場合、これは不可能です。これを回避する必要はありませんが、解決策を見つけることができませんでした。 – Marc

1

その春はListに翻訳される配列、になるだろう。 Listの実装をインスタンス化します。Commandオブジェクトでは、このような処理を行う必要はありません。あなたのCommandオブジェクトで

private List<String> bParameters; 

public void setBParameters(List<String> bParameters) { 
    this.bParameters= bParameters; 
} 
public List<String> getBParameters() { 
    return bParameters; 
} 

を使用してみてください。これらの値はおそらく文字列として入力されています。

+0

コントローラでSet <>の代わりにList <>を使用すると、問題が解決しました。 –

1

私は春3.5を使用

private Set<Types> typeses = new HashSet<Types>(0); 


    <form:textarea path="typeses" style="width:200px;height:150px"/> 

として結合の問題を持っていません。これで唯一の問題は、それは私がフォームパラメータに設定をバインドする方法を見つけることはできませんいくつかの理由

+0

[] - マークを削除する方法を教えてくださいありがとう –

+0

私もそれを知りたいです! :) – mjgirl

+1

私はすべてのフィールドをバインドした後。 [] - マークは自動的に削除されます。 –

0

のため[]フィールドに-marksを残していること、です。しかし、 "代わりにリストを使う"ことを提案している他の解決策は、私にとっては十分ではありません。なぜなら、フィールドがeagerフェッチとJPAの一対多の関係の一部であるからです。using List will cause duplicates

したがって、代わりにJSON(Ajaxを使用)という形式を使用します。ここではどのようにjQueryのであります:あなたは、コントローラ側でapplication/json

としてのcontentTypeをマークする必要があり

var person = // .. construct form object here 

$.ajax(url, { 
    method : 'post', 
    contentType : 'application/json', 
    data : JSON.stringify(person) 
}); 

注意、あなたは@RequestBody注釈を使用してJavaオブジェクトにこれをバインドすることができます。

@RequestMapping(..) 
public void save(@RequestBody Person person) { 
    .. 
} 

詳細情報:https://gerrydevstory.com/2013/08/14/posting-json-to-spring-mvc-controller/

関連する問題