Как отобразить конкретный атрибут в поле выбора в приложении, сгенерированном ROO

В настоящее время я занимаюсь Spring-Roo и Spring-MVC. У меня есть довольно простое приложение, которое Roo сгенерировал для меня. Он состоит из двух сущностей, Record и Car, где Record ссылается на конкретный автомобиль.

После первоначальной настройки я меняю одно из представлений на использование поля: выберите и отобразите поле со списком для выбора доступных автомобилей и добавления их в запись.

<field:select field="car" id="c_de_recordcars_domain_Record_car" items="${cars}" path="/cars" />

Этот тег вызывает у меня головную боль. Как и сейчас, поле со списком отображает все доступные автомобили... но делает это, отображая все атрибуты (например, «Автомобиль 1 Вт, 18 января, 00:00:00 CET 2011 Friver1»). Все, что я хочу, это чтобы в поле со списком отображался только атрибут имени («Автомобиль 1»).

Внутри тега есть только атрибут "itemValue", но он отображает только значение, которое помещается в параметр запроса... Мне нужно что-то вроде "displayValue", где я могу указать на поле java, которое используется для отображать.

Как я могу этого добиться? Спасибо


person lostiniceland    schedule 13.01.2011    source источник


Ответы (4)


Spring Roo (с использованием функциональности Spring MVC) предлагает использовать службу преобразования приложений. Вы должны реализовать метод Converter<Car, String> getCarConverter() внутри файла ApplicationConversionServiceFactoryBean.

Подробности см. в справке.

person viator    schedule 20.02.2011

:) Просто провел все воскресенье, пытаясь решить ту же проблему. Просто добавьте itemLabel="имя вашего поля из класса Car".

<field:select field="car" 
              id="c_de_recordcars_domain_Record_car" 
              items="${cars}" 
            **itemLabel="CarName"**
              itemValue="id"
              path="/cars" />
person Mailis Toompuu    schedule 28.11.2011
comment
Это кажется намного чище, чем возиться с преобразователями. Вы также можете создать свой собственный метод получения, если хотите вернуть что-то более сложное, чем одно поле. - person Andy Cochrane; 11.05.2012
comment
Таким образом, вы можете просто разместить один ярлык, которого недостаточно для одного ко многим. - person Ali.Mojtehedy; 26.05.2015

Для Spring 1.1.4 и выше:

  1. Внимательно прочитайте ApplicationConversionServiceFactoryBean.java.

  2. Внимательно прочитайте ApplicationConversionServiceFactoryBean_Roo_ConversionService.aj. Здесь вы найдете статический внутренний класс CarConverter. Он должен иметь очень длинный префикс. Здесь вы должны найти метод installLabelConverters с длинным префиксом.

  3. Скопируйте код CarConverter из 2 в 1, убрав длинный префикс. Измените код внутри метода convert(), как вам нравится.

  4. Скопируйте соответствующие операторы импорта из 2 в 1.

  5. Скопируйте код метода installLabelConverters из 2 в 1, убрав длинный префикс.

  6. Теперь сохраните файл 1.

  7. Запустите roo, пусть он обновит файл .aj.

  8. Используйте "mvn tomcat:run" для компиляции и повторного запуска.

person Alex Wen    schedule 05.08.2011

вы можете попробовать добавить метод toString в объект Car, в котором возвращается поле имени Car. и проверьте этот профиль в path:/src/main/webapp/WEB-INF/tags/form/fields/select.tagx, обновите все содержимое опции:

<option value="${item}">
    <spring:eval expression="item" />
</option>

to:

<option value="${item}">
    ${item}
</option>
person miracle    schedule 05.02.2011