2011-01-13 61 views
7

我目前正在將自己融入Spring-Roo和Spring-MVC。我有一個Roo爲我生成的相當簡單的應用程序。它由兩個實體組成,記錄和汽車,其中記錄有一個特定汽車的參考。如何在ROO生成的應用程序的selectbox中顯示屬性屬性

初始設置後,我更改其中一個視圖以使用字段:選擇並顯示組合框以選擇可用汽車並將它們添加到記錄中。

<field:select field="car" id="c_de_recordcars_domain_Record_car" items="${cars}" path="/cars" /> 

這個標籤讓我頭疼。到目前爲止,comboxbox顯示所有可用的汽車......但它通過顯示所有屬性(如「Car 1 Tue Jan 18 00:00:00 CET 2011 Friver1」)。我想要的只是組合框只顯示名稱屬性(「Car 1」)。

在標籤中,只有「itemValue」-Attribute,但這隻能呈現放入請求參數中的值......我需要類似「displayValue」的地方,我可以指向java字段用於顯示。

我該如何做到這一點? 謝謝

回答

8

Spring Roo的(使用Spring MVC功能)提供使用應用程序轉換服務。您應該在ApplicationConversionServiceFactoryBean內實施方法Converter<Car, String> getCarConverter()

有關詳細信息,請參閱reference

0

您可以嘗試在實體Car中添加toString方法,其中返回Car的名稱字段。 和path:/src/main/webapp/WEB-INF/tags/form/fields/select.tag X 更新驗證此配置文件的所有選項內容:

<option value="${item}"> 
    <spring:eval expression="item" /> 
</option> 

到:

<option value="${item}"> 
    ${item} 
</option> 
2

對於Spring Roo的1.1.4及以上版本:

  1. 閱讀ApplicationConversionServiceFactoryBean.java仔細

  2. 閱讀ApplicationConversionServiceFactoryBean_Roo_ConversionService.aj仔細 你應該在這裏找到一個靜態內部類CarConverter。它應該有一個很長的前綴 。 你應該在這裏找到一個installLabelConverters方法,它有一個長前綴。

  3. 將代碼CarConverter從2複製到1,刪除長前綴。 根據你的喜好更改convert()方法內的代碼。

  4. 複製從2相關導入語句爲1

  5. 複製代碼installLabelConverters方法從2到1,取出長前綴。

  6. 現在將文件保存1.

  7. 開始袋鼠,讓它更新.aj文件。

  8. 使用「mvn tomcat:run」進行編譯並再次運行。

11

:)剛剛度過整個星期日掙扎出同樣的問題。 只需添加itemLabel =「您的汽車類的字段名稱」。

<field:select field="car" 
       id="c_de_recordcars_domain_Record_car" 
       items="${cars}" 
      **itemLabel="CarName"** 
       itemValue="id" 
       path="/cars" /> 
+1

這看起來比用轉換器搞亂了很多。如果你想返回比單個字段更復雜的東西,你也可以創建你自己的getter方法。 – 2012-05-11 18:20:54

相關問題