2012-05-31 85 views
0

我正在使用Spring MVC項目,但我無法弄清楚如何在視圖中更改模型的字符串表示形式。如何在Spring MVC中更改模型的顯示名稱

我有一個與WorkOrder模型具有ONE_TO_MANY關係的客戶模型。在workorders/show.jspx上,客戶顯示爲字符串,該字符串是第一個和最後一個姓名,電子郵件地址和電話號碼連接的字符串。

我該如何改變?我以爲我可以改變客戶的toString方法,但這並不奏效。

+0

我不認爲你應該使用toString,而是像$ {customer.firstName} $ {customer.lastName}等等......但它當然取決於模型和視圖的樣子。 –

回答

1

我們找到了一個很好的解決方案。對於ApplicationConversionServiceFactoryBean_Roo_ConversionService.aj中的所有模型都有toString()方法

您可以將所需模型的方法推送到ApplicationConversionServiceFactoryBean.java中並對其進行修改。在我來說,我添加了這個:

public Converter<Customer, String> getCustomerToStringConverter() { 
    return new org.springframework.core.convert.converter.Converter<com.eg.egmedia.bizapp.model.Customer, java.lang.String>() { 
     public String convert(Customer customer) { 
      return new StringBuilder().append(customer.getId()).append(' ').append(customer.getFirstName()).append(' ').append(customer.getLastName()).toString(); 
     } 
    }; 
} 

Spring使用這個對所有視圖頁面所以這將改變您的整個應用程序模型的字符串表示!

1

一個解決方案是將show/push()推送到WorkOrderController,以將渲染視圖標記映射到您希望看到的內容。

@RequestMapping(value = "/{id}", produces = "text/html") 
public String show(
    @PathVariable("id") Long id, 
    Model uiModel) 
{ 
    final WorkOrder workOrder = WorkOrder.findWorkOrder(id); 
    uiModel.addAttribute("workOrder", workOrder); 
    uiModel.addAttribute("itemId", id); 
    // Everything but this next line is just ripped out from the aspectJ/roo stuff. 
    // Write a method that returns a formatted string for the customer name, 
    // and a customer accessor for WorkOrder. 
    uiModel.addAttribute("customerDisplay", workOrder.getCustomer().getDisplayName()); 
    return "workorders/show"; 
} 

在您的i18n/application.properties文件中爲customerDisplay放置/定義一個標籤。

然後在你的show.jspx,你可以用一些訪問映射喜歡...(訣竅是其它視圖類似。)

<field:display field="customerDisplay" id="s_your_package_path_model_WorkOrder_customerDisplay" object="${workorder}" z="user-managed" /> 

我是新來Roo的,所以我會愛看到更好的答案。