私は、コントローラを介して、以下を渡しています:反復処理のHashMap
HashMap<SomeClassA, ArrayList<SomeClassB>>
SomeClassAとSomeClassBはプリミティブではない、と私で符号化されています。彼らのゲッターはStringsかLongsのいずれかです。 HashMap変数a map123
を呼び出します。私がやろうとしています何
は、このコードのようなもの持っている:
<#list map123?keys as key>
${key} = ${map123[key]}
</#list>
をしかし、私が取得することはmap123 [キー]がNULLであるということです! これは、私がArrayListを反復できないことを意味します。
私は何が間違っていましたか(あるいは何をすべきでしょうか)?
FreeMarkerのバージョンで
null
値を確認することができますフレームワークに統合されているので、フレームワークが更新されない限り、バージョンを変更することはできません。ですから、私が使用しなければならない回避策は、必要な値だけをSomeClassAとSomeClassBから1つのSomeClassCに結合し、それをListとして渡すことで即興化することです。 –より高いバージョンでそのバージョンを上書きすることができない場合(フレームワークは単にMaven依存性ではないため)、最もクリーンな解決策は、 '?new'を介して公開することです(いくつかのユーティリティ' TemplateMethodModelEx'実装'WrapperTemplateModel.getWrappedObject()'を介して引数からJavaの 'Map'を取り出し、目的の結果リストを構築します。だから、 '<#list mapEntries(map123)as kvp> $ {kvp.key} = $ {kvp.value}'のようなものを使うことができます。 – ddekany
FreeMarker 2.3.22では '?api'が導入されましたが、これはまったく新しいものではありません。あなたは '?api'を少なくとも持っているなら、' #list map123?api.entrySet()をkvp> $ {kvp.key} = $ {kvp.value} 'とすることができます。 – ddekany