我被困在轉換器和綁定的問題中。 我有一個網頁的表單:選擇在哪裏綁定對象的名單與項目值彈簧窗體:select不顯示帶有「selected」屬性選項
<form:select id="id_a" items="${items}" path="builder" itemValue="id" />
我創建2轉換器,轉換這個bean。一個從bean轉換爲顯示描述的字符串,另一個從id轉換爲從DB獲取bean。
private Converter<BuilderType, String> getBuilderTypeToStringConverter(){
return new Converter<BuilderType, String>(){
public String convert(BuilderType builder){
return builder.getDescription();
}
};
}
private Converter<String,BuilderType> getStringToBuilderTypeConverter(){
return new Converter<String, BuilderType>(){
public BuilderType convert(String id){
return builderService.findById(new Long(id));
}
};
}
所以,當我創建bean一切正常,我看到在選擇欄的描述,當提交ID到達控制器之前被轉化爲對現實豆,放入模型屬性的形式。
問題是當我嘗試更新時,我的選擇仍然正確填充,但實際值未選中。沒有選項使用屬性「selected」來正確初始化select。
這真的很奇怪,因爲我有一個春季roo的示例應用程序(petclinic),實際上使用相同類型的轉換器正確填充了select。
我發現得到這個工作的唯一方法是有點是添加「.ID」的路徑:
<form:select id="id_a" items="${items}" path="builder.id" itemValue="id" />
但在提交我收到回控制器中的空‘建設者’這樣只有id集合,而不是正確的轉換器被調用時我正常接收的comprete對象。
我真的不知道兩個應用程序之間的區別是什麼使得一個工作而不是另一個...甚至春天庫版本是相同的!
正如我所說,它已經解決了在配置上面的過濾器,並且沒有改變與問題發佈的代碼。仍然不知道爲什麼沒有說這是必需的,使事情工作。 – Massimo