Использование вспомогательного параметра в шаблонах Play Framework 2.0

Я пытаюсь использовать views.html.helper.select (документация здесь). Я не знаю scala, поэтому использую java. Мне нужно передать объект типа Seq[(String)(String)] в шаблон правильно? Что-то типа:

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

@import helper._

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

Я не знаю, как создать Seq[(String)(String)] в java. Мне нужно заполнить эту коллекцию парами (id, title) из моего класса enum.

Может ли кто-нибудь показать мне пример использования помощника выбора?

Я нашел эту тему в группе пользователей, но Ответ Кевина мне не очень помог.


person UltraMaster    schedule 12.04.2012    source источник


Ответы (1)


Правильный тип: Seq[(String, String)]. Это означает последовательность пар String. В Scala есть способ определять пары с помощью стрелки: a->b == (a, b). Таким образом, вы можете написать, например:

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

Но есть еще один помощник, как показано в документации, для построения последовательности параметров выбора: options, поэтому вы можете переписать приведенный выше код как:

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

В случае, если значения ваших опций совпадают с их меткой, вы даже можете сократить код до:

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

(примечание: в Play 2.0.4 options(List("Foo", "Bar")) не компилируется, поэтому вы можете попробовать это options(Seq("Foo", "Bar")))

Для заполнения опций из кода Java удобнее использовать либо перегруженный options, принимающая java.util.List<String> в качестве параметра (в этом случае значения параметров будут такими же, как и их метки) или перегруженная функция, принимающая java.util.Map<String, String>.

person Julien Richard-Foy    schedule 13.04.2012
comment
Большое спасибо за ответ. Но это не решает мою проблему. Мне нужно создать коллекцию и заполнить ее значениями на Java, а затем передать эту коллекцию в шаблон scala. - person UltraMaster; 13.04.2012
comment
Ах, я действительно неправильно понял вашу проблему. Я обновил свой ответ, чтобы предложить способы заполнения параметров из кода Java. - person Julien Richard-Foy; 14.04.2012
comment
options(List("Foo", "Bar")) не проверял тип для меня, поэтому я использовал @myOptions= @{List("Foo", "Bar").map(str => str->str)} - person Matthias Braun; 18.11.2015