2012-02-23 26 views
5

私はユーザーが(他のユーザーの中から)製品の工場を選択できるフォームを作成しています。Spring MVC 3 - カスタムラベル<form:select>

各工場は、およびIDで識別され、特定のアドレスを持っています。

私は、コードを次のようにカスタムラベルを使用する:まず

<form:select items="${factories}" path="factory" itemValue="id" itemLabel="..."/> 

私は春のフォーマッタ機能(org.springframework.format.Formatterインターフェイス)を使用してみましたが、私はこれをしなかったとき、私は削除する場合それはフォーマッタを経由して自動的に表示持っている「ITEMLABEL」属性):

<form:select items="${factories}" path="factory" itemValue="id"/> 

しかし、それは()編集の場合に設定された場合、それは適切な値を選択していませんでした。

それから私はしようとした:

<form:select path="factory" itemValue="id"> 
    <c:forEach ...> 
     <form:option value="${factory.id}" label="${factory.address.city} ${factory.address.street}" 
    </c:foreach> 
</form:select> 

しかし、以前のソリューション春のようなモデルに設定された適切な値を選択していませんでした。

私の質問は:

は、それが可能な方法でエンティティをフォーマットすると、そのフォーム:適切に選択した作品、選択フィールドの値はそのラベルと同じではありません。

答えて

5

私は同じ問題を抱えていましたが、問題は形式です:オプション値とラベルは、jstlを指定する柔軟性を持たずに直接プロパティにマップします。それはしようとすると、(この場合の「工場」)name属性に基づいて「パス」をピックアップします

<select name="factory"> 
    <c:forEach var="factory" items="${factories}" > 
     <option value="${factory.id}" label="${factory.address.city} ${factory.address.street}"/> 
    </c:forEach> 
</select> 

春:

は、だからあなたのようなものに、HTMLをクランク手に持っています自動的に使用しているモデルオブジェクトにマップします。

別の方法として、モデルに別のフィールドを追加して、ラベルを連結してフォーマットすることもできます。そのオブジェクトが@Entityの場合は、@Transientというフィールドを作成します。

-1

また、あなたのJSPでのtoString

@Override 
    public String toString() { 
     return "desired string"; 
} 

その後工場クラスの()メソッドをオーバーライドすることができます

<form:select items="${factories}" itemValue="id" path="factory"/> 
関連する問題