Google app engine 使用Scala和StringTemplate,如何在地图中循环

Google app engine 使用Scala和StringTemplate,如何在地图中循环,google-app-engine,scala,stringtemplate,Google App Engine,Scala,Stringtemplate,我在Google AppEngine中使用Scala和StringTemplate很好地设置了我的环境。我在循环浏览地图并将其显示在模板中时遇到问题。当我将一个简单的字符串列表分配给模板时,它使用: 在Scala Servlet中: var photos = List[String]() //... get photo url and title ... photos = photo_url :: photos template.setAttribute("photos",

我在Google AppEngine中使用Scala和StringTemplate很好地设置了我的环境。我在循环浏览地图并将其显示在模板中时遇到问题。当我将一个简单的字符串列表分配给模板时,它使用:

在Scala Servlet中:

  var photos = List[String]()

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

  photos = photo_url :: photos
  template.setAttribute("photos", photos: _*)
  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$_s.jpg"></div>
  }$
  $photos: { photo|
    <div><img src="$photo.url$_s.jpg" title="$photo.title$"></div>
  }$
在模板中:

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

想法/想法?

根据Rex的建议,我能够使用带有
@BeanProperty
注释的case类使其工作:


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
}

案例类MyPhoto(@BeanProperty val url:String,@BeanProperty val title:String)
def generateMyPhotos():字符串={
val tp=new StringTemplate(“$photos:{photo}$”)
val照片=列表(我的照片(“http://myphoto.com“,“我的照片”))
tp.setAttribute(“照片”,照片:*)
tp.toString
}

这对我来说很有效(使用StringTemplate库,您可能已经这样做了)。

有一个简单的替代方案,不需要使用额外的包和注释。注册一个scala对象适配器,它知道如何从scala对象和scala集合检索属性值

这已包含在StringTemplate常见问题解答中,网址为:

删除了我的建议——我只是在这里指出,我创建
案例类TitleURL(url:String,title:String)
并用它代替映射的简单想法是行不通的。根据Marcus的说法,它会生成一个错误,比如“类FlickrTestServlet$TitleURL$2没有这样的属性:模板上下文中的标题[templates/flickr\u template if(照片)\u subtemplate anonymous]”。太棒了,这很有效!非常感谢。是的,我正在为StringTemplate使用scalasti包装器。我唯一要做的就是为Bean属性import scala.reflect添加一个导入_