1

LinkedHashMap<String, List<MyObject>)Play フレームワークの (2.0) アプリケーション コントローラーで、文字列キーを挿入する順序を維持するためにJava を作成して います。

以下のようなテンプレートでこの LinkedHashMap を繰り返してみました:-

@for(currentKey <- linkedHashMapInstance.keySet()){
 ....
   loop  myObjectList for the currentKey
 ....
}

画面を更新するたびにランダムな順序になります。

次に、ループのロジックを変更しようとしました

@for((currentKey , currentList) <- mapOfCards){
 .. used the key and the list
}

サーバー側のデバッグ ログは正しい順序を示しています。

Java の LinkedHashMap は、scala テンプレートでレンダリングされた場合でも挿入の順序を維持すると想定していました。

ここで何か間違ったことをしていますか?

4

2 に答える 2

2

私は数ヶ月前に同じ問題に直面しました。@nico_ekito さんのご指摘の通り、Java→Scala 変換に関する問題です。

それを修正するには、次のようなことを試してください。

@for((currentKey , currentList) <- SortedMap.empty[String, String] ++ mapOfCards) {

}

[String, String]のタイプに置き換えることによって(currentKey , currentList)

それが役に立てば幸いです。

于 2013-01-04T10:12:58.520 に答える
2

Java->Scala 変換に関連している可能性があります。

.asScala次のように使用してみてください。

@for((currentKey , currentList) <- mapOfCards.asScala){
 .. 
}

アップデート :

それはで動作します:

@for((currentKey , currentList) <- scala.collection.mutable.LinkedHashMap.empty[String, String] ++ mapOfCards) {

}
于 2012-11-30T07:58:30.290 に答える