2011-01-13 11 views
7

Obecnie jestem w stanie uzyskać dostęp do Spring-Roo i Spring-MVC. Mam dość prostą aplikację wygenerowaną przez Roo. Składa się z dwóch elementów, Record and Car, gdzie Record ma odniesienie do jednego konkretnego samochodu.Jak wyświetlić uczestnika w polu wyboru w aplikacji generowanej przez ROO

Po wstępnej konfiguracji zmieniam jedno z widoków do użycia pola: wybierz i wyświetl combobox do wyboru dostępnych samochodów i dodaj je do rekordu.

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

Ta plakietka daje mi ból głowy. Jak do tej pory, skrzynka comboxbox wyświetla wszystkie dostępne samochody ... ale robi to wyświetlając wszystkie atrybuty (np. "Car 1 Tue Jan 18 00:00:00 CET 2011 Friver1"). Wszystko, czego chcę, to to, że combobox pokazuje tylko atrybut name ("Car 1").

W tagu istnieje tylko "itemValue" -Attribute, ale to tylko renderuje wartość, która jest umieszczona w parametrze żądania ... Potrzebuję czegoś takiego jak "displayValue", gdzie mogę wskazać pole java który jest używany do wyświetlania.

Jak mogę to osiągnąć? Dzięki

Odpowiedz

8

Wiosna Maleństwo (przy użyciu funkcji Wiosną MVC) oferuje usługę przeliczenia obsłudze aplikacja. Powinieneś zaimplementować metodę Converter<Car, String> getCarConverter() wewnątrz ApplicationConversionServiceFactoryBean.

Aby uzyskać szczegółowe informacje, patrz reference.

0

można spróbować dodać toString sposób w jednostce Car, w którym zwracają Car „s polu Nazwa. i zweryfikować profil w path:/src/main/webapp/WEB-INF/tags/form/fields/select.tag x zaktualizować wszystkie treści opcję:

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

do:

<option value="${item}"> 
    ${item} 
</option> 
2

na wiosnę roo 1.1.4 i nowsze:

  1. przeczytane ApplicationConversionServiceFactoryBean.java starannie

  2. Czytaj ApplicationConversionServiceFactoryBean_Roo_ConversionService.aj starannie Należy znaleźć statyczną wewnętrzną klasy CarConverter tutaj. Powinien mieć bardzo długi prefiks . Powinieneś znaleźć tutaj metodę installLabelConverters z długim prefiksem.

  3. Skopiuj kod CarConverter z 2 na 1, usuń długi prefiks. Zmień kod wewnątrz metody convert(), tak jak lubisz.

  4. Skopiować powiązane z nimi import od 2 do 1.

  5. kopiowania metodą installLabelConverters kod zawierający od 2 do 1, usunąć długiej prefiks.

  6. Teraz zapisz plik 1.

  7. Rozpocznij roo, niech zaktualizować plik .aj.

  8. Użyj "mvn tomcat: run", aby skompilować i uruchomić ponownie.

11

:) Właśnie spędziłem całą niedzielę borykającą się z tym samym problemem. Po prostu dodaj itemLabel = "twoja nazwa pola z klasy samochodów".

<field:select field="car" 
       id="c_de_recordcars_domain_Record_car" 
       items="${cars}" 
      **itemLabel="CarName"** 
       itemValue="id" 
       path="/cars" /> 
+1

Wydaje się to o wiele czystsze niż mieszanie z przetwornikami. Możesz również utworzyć własną metodę getter, jeśli chcesz zwrócić coś bardziej złożonego niż pojedyncze pole. –

+0

W ten sposób można po prostu umieścić jedną etykietę, która dla jednego do wielu nie jest wystarczająca –

Powiązane problemy