2012-04-12 22 views
21

Próbuję użyć views.html.helper.select (dokumentacja here). Nie znam scala, więc używam java. Muszę przekazać obiekt typu Seq [(String) (String)] do szablonu prawym? Coś jak:Używanie pomocnika opcji w szablonach Play Framework 2.0

@(fooForm:Form[Foo])(optionValues:Seq[(String)(String)]) 

@import helper._ 

@form(routes.foo){ 
    @select(field=myForm("selectField"),options=optionValues) 
} 

Nie wiem, jak utworzyć Seq [(String) (String)] w java. Muszę wypełnić tę kolekcję parami (id, title) z mojej klasy enum.

Czy ktoś może mi pokazać, jak używać wybranego pomocnika?

Znalazłem this wątek na grupie użytkowników, ale odpowiedź Kevina nie pomogła mi bardzo.

Odpowiedz

40

Właściwy typ to: Seq[(String, String)]. Oznacza sekwencję par String. W Scali istnieje sposób definiowania par za pomocą strzałki: a->b == (a, b). Więc można napisać np:

@select(field = myForm("selectField"), options = Seq("foo"->"Foo", "bar"->"Bar")) 

Ale nie ma innego pomocnika, jak pokazano w dokumentacji, budowanie sekwencji wybranych opcji: options, więc można przepisać powyższy kod jako:

@select(myForm("selectField"), options("foo"->"Foo", "bar"->"Bar")) 

w przypadku opcjach wartości są takie same jak ich etykiety, można nawet skrócić kod do:

@select(myForm("selectField"), options(List("Foo", "Bar"))) 

(uwaga: podczas odtwarzania 2.0.4 options(List("Foo", "Bar")) nie kompiluje, więc można spróbować to options(Seq("Foo", "Bar")))

Aby wypełnić opcje z kodu Java, tym bardziej wygodnym sposobem jest użycie albo przeciążone options funkcję robienia java.util.List<String> jako parametr (w tym przypadki opcji wartości będą takie same jak ich etykiecie) lub przeciążona funkcja pobierająca java.util.Map<String, String>.

+0

Dziękuję bardzo za odpowiedź. Ale to nie rozwiązuje mojego problemu. Potrzebuję utworzyć kolekcję i wypełnić ją wartościami w Javie, a następnie przekazać tę kolekcję do szablonu scala. – UltraMaster

+0

Ach, naprawdę źle zrozumiałem twój problem. Zaktualizowałem swoją odpowiedź, aby zasugerować sposoby wypełnienia opcji z kodu Java. –

+0

'options (List (" Foo "," Bar "))' nie testowałem dla mnie, więc użyłem '@ myOptions = @ {List (" Foo "," Bar ") map (str => str-> str)} ' –