0

我正在使用 Spring MVC 项目,但不知道如何更改视图中模型的字符串表示形式。

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

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

4

2 回答 2

1

一种解决方案是将 show() 更改/推入 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 的新手,所以我很想看到一个更好的答案。

于 2012-06-03T19:26:03.720 回答
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 将它用于所有视图页面,因此这将在整个应用程序中更改模型的字符串表示!

于 2012-06-06T19:10:35.957 回答