1

Google AppEngine 内で Scala、StringTemplate を使用して環境を適切にセットアップしました。マップをループしてテンプレートに表示するのに問題があります。文字列だけの単純なリストをテンプレートに割り当てると、次を使用して機能します。

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 

考え/アイデア?

4

2 に答える 2

3

Rex の提案に従って@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
}

これは私にとってはうまくいきました(おそらくすでに行ったように、 StringTemplateのscalastiライブラリを使用しています)。

于 2010-06-12T04:22:58.557 に答える
0

追加のパッケージや注釈を使用せずに、簡単な代替手段があります。Scalaオブジェクトとscalaコレクションからプロパティ値を取得する方法を知っているscalaオブジェクトアダプターを登録します。

これは現在、次のStringTemplate FAQに含まれています: http ://www.antlr.org/wiki/display/ST4/Altering+property+lookup+for+Scala

于 2012-06-20T18:47:56.943 に答える