我正在使用 Spring MVC 项目,但不知道如何更改视图中模型的字符串表示形式。
我有一个与 WorkOrder 模型具有 ONE_TO_MANY 关系的 Customer 模型。在 workorders/show.jspx 上,客户显示为一个字符串,该字符串由名字和姓氏、电子邮件地址和电话号码连接而成。
我该如何改变?我以为我可以更改 Customer 上的 toString 方法,但这不起作用。
我正在使用 Spring MVC 项目,但不知道如何更改视图中模型的字符串表示形式。
我有一个与 WorkOrder 模型具有 ONE_TO_MANY 关系的 Customer 模型。在 workorders/show.jspx 上,客户显示为一个字符串,该字符串由名字和姓氏、电子邮件地址和电话号码连接而成。
我该如何改变?我以为我可以更改 Customer 上的 toString 方法,但这不起作用。
一种解决方案是将 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 的新手,所以我很想看到一个更好的答案。
我们找到了一个很好的解决方案。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 将它用于所有视图页面,因此这将在整个应用程序中更改模型的字符串表示!