2012-05-31 3 views
0

Я работаю с проектом Spring MVC, и я не могу понять, как изменить представление String модели в представлениях.Как изменить отображаемое имя модели в Spring MVC

У меня есть модель Customer, у которой есть отношение ONE_TO_MANY с моделью WorkOrder. На рабочих станциях/show.jspx Клиент отображается как строка, которая является первым и последним именем, адресом электронной почты и номером телефона, объединенным.

Как это изменить? Я думал, что могу просто изменить метод toString для Клиента, но это не сработало.

+0

Я не думаю, что вы должны использовать toString, а что-то вроде $ {customer.firstName} $ {customer.lastName} и т. Д., Но это, конечно, зависит от того, как выглядит модель и вид. –

ответ

1

Мы нашли хорошее решение. Существуют методы toString() для всех моделей в ApplicationConversionServiceFactoryBean_Roo_ConversionService.aj

Вы можете просто нажать метод для модели, которую вы хотите, в 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 использует это для всех страниц просмотра, так это изменит строковое представление вашей модели по всему приложению!

1

Одним из решений было бы изменить/push-in 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" /> 

Я новичок в Ий, так что я бы любите видеть лучший ответ.

Смежные вопросы