Карта [Int, String] в шаблоне платформы Play

Я использую платформу Play 2.0.4 и могу успешно создать шаблон, который принимает Map[String, String] шаблон, поместив это в часть контроллера:

Map<String, String> test = new HashMap<String, String>();
return ok(views.html.template.render(test));

И в template.scala.html:

@(map : Map[String, String])

Однако, если я изменю первый String для Int (Целое число в части контроллера), я получаю это исключение:

 error: method render in class template cannot be applied to given types; 

Можно ли определить Integer -> String mapping в инфраструктуре Play и, если да, как я могу этого достичь?

Редактировать:
Исключение происходит, когда я изменяю код в контроллере на:

Map<Integer, String> test = new HashMap<Integer, String>();

И в шаблоне:

@(map: Map[Int, String])

2 ответа

Решение

В своем шаблоне вы указываете, что ваш Mapключи scala.Intс, но вы даете это Map с java.lang.Integerкак ключи.

Решение состоит в том, чтобы изменить строку в вашем шаблоне на

@(map: Map[Integer, String])

С вашим кодом, сгенерированным render метод принимает Map<Object, String>, Затем вы можете предоставить такую ​​карту.

Существуют помощники автоматического преобразования из Java в Scala (и из Scala в Java). Я не знаю, можно ли подать заявку, если этот случай позволит вам иметь Map<Integer, String> в render метод.

Другие вопросы по тегам