我正在使用Spring MVC项目,我无法弄清楚如何在视图中更改模型的String表示。
我有一个与WorkOrder模型具有ONE_TO_MANY关系的Customer模型。在workorders / show.jspx上,Customer显示为一个字符串,它是连接的名字和姓氏,电子邮件地址和电话号码。
我该如何更改?我以为我可以在Customer上更改toString方法,但这不起作用。
答案 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表示形式!