Используя Scala и StringTemplate, как мне пройти по карте - PullRequest
1 голос
/ 11 июня 2010

У меня хорошо настроена среда с использованием Scala, StringTemplate в Google AppEngine.У меня возникают проблемы с циклическим просмотром карты и ее отображением в шаблоне.Когда я присваиваю шаблону «Простой список просто строк», он работает, используя:

В сервлете Scala:

  var photos = List[String]()

  //... get photo url and title ...

  photos = photo_url :: photos
  template.setAttribute("photos", photos: _*)

В шаблоне:

  $photos: { photo|
    <div><img src="$photo$_s.jpg"></div>
  }$

Работает выше,Тем не менее, любая попытка создать карту с использованием URL-адреса и заголовка и присвоения шаблону дает мне ошибку.Вот моя попытка, которая не работает:

В сервлете Scala:

  var photos = List[Map[String,String]]()

  //... get photo url and title ...

  photos = Map("url" -> url, "title" -> title) :: photos
  template.setAttribute("photos", photos: _*)

В шаблоне:

  $photos: { photo|
    <div><img src="$photo.url$_s.jpg" title="$photo.title$"></div>
  }$

Это дает мне следующую ошибку

Class scala.collection.immutable.Map$Map2 has no such attribute: title in template context 

Мысли / Идеи?

Ответы [ 2 ]

3 голосов
/ 12 июня 2010

Следуя предложению Рекса, я смог заставить его работать, используя класс дел с аннотацией @BeanProperty для полей:


case class MyPhoto(@BeanProperty val url: String, @BeanProperty val title: String)

def generateMyPhotos() : String = {
  val tp = new StringTemplate("$photos: { photo|<div><img src=\"$photo.url$_s.jpg\"  title=\"$photo.title$\"></div>}$")
  val photos = List(MyPhoto("http://myphoto.com", "my photo"))
  tp.setAttribute("photos", photos: _*)
  tp.toString
}

Это сработало для меня (я использовал библиотеку scalasti для StringTemplate, как вы, вероятно, уже сделали).

0 голосов
/ 20 июня 2012

Есть простая альтернатива, без использования дополнительных пакетов и аннотаций.Зарегистрируйте адаптер объекта Scala, который знает, как извлечь значения свойств из объектов Scala и коллекций Scala.

Это теперь включено в FAQ по StringTemplate по адресу: http://www.antlr.org/wiki/display/ST4/Altering+property+lookup+for+Scala

...