Spring MVCプロジェクトで作業していますが、ビュー内のモデルの文字列表現を変更する方法がわかりません。
WorkOrderモデルとONE_TO_MANYの関係にあるCustomerモデルがあります。workorders / show.jspxでは、顧客は、名前、電子メールアドレス、および電話番号を連結した文字列として表示されます。
これを変更するにはどうすればよいですか?CustomerのtoStringメソッドを変更するだけでよいと思いましたが、うまくいきませんでした。
Spring MVCプロジェクトで作業していますが、ビュー内のモデルの文字列表現を変更する方法がわかりません。
WorkOrderモデルとONE_TO_MANYの関係にあるCustomerモデルがあります。workorders / show.jspxでは、顧客は、名前、電子メールアドレス、および電話番号を連結した文字列として表示されます。
これを変更するにはどうすればよいですか?CustomerのtoStringメソッドを変更するだけでよいと思いましたが、うまくいきませんでした。
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";
}
customerDisplayのi18n/application.propertiesファイルにラベルを配置/定義します。
次に、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はこれをすべてのビューページに使用するため、アプリ全体でモデルの文字列表現が変更されます。