如何在Spring MVC中更改模型的显示名称

时间:2012-05-31 13:56:19

标签: spring spring-mvc spring-roo

我正在使用Spring MVC项目,我无法弄清楚如何在视图中更改模型的String表示。

我有一个与WorkOrder模型具有ONE_TO_MANY关系的Customer模型。在workorders / show.jspx上,Customer显示为一个字符串,它是连接的名字和姓氏,电子邮件地址和电话号码。

我该如何更改?我以为我可以在Customer上更改toString方法,但这不起作用。

2 个答案:

答案 0 :(得分:1)

一种解决方案是将/ push-in show()更改为WorkOrderController,以将render-view-tag映射到您希望看到的内容。

@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的新手,所以我很乐意看到更好的答案。

答案 1 :(得分: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对所有视图页面都使用它,这样就可以在整个应用程序中更改模型的String表示形式!