マップを反復する場合
<#list map?keys as key>
${key}
</#list>
clone、1、getKey、5などを返します
不要な値を1つずつ削除する代わりに、誰かが解決策を持っていますか?
マップを反復する場合
<#list map?keys as key>
${key}
</#list>
clone、1、getKey、5などを返します
不要な値を1つずつ削除する代わりに、誰かが解決策を持っていますか?
私がよく理解していれば、メソッドとキーの両方が混在しています。これは、object_wrapper
構成設定 ( Configuration.setObjectWrapper(ObjectWrapper)
) によって異なります。BeansWrapper
をとして使用している場合object_wrapper
(この問題がまったくなかった とは対照的にDefaultObjectWrapper
)、これは によって防ぐことができますyourBeansWrapper.setSimpleMapWrapper(true)
。ただし、そのプロジェクトでfalse
. FreeMarker 言語にはマップ タイプがないという問題があります。ハッシュと呼ばれるものがあり、文字列キー (サブ変数) のみをサポートします。したがって、人々は、 などのハッシュ演算子の代わりに -s の Java API を使用するだけでよく、そのために必要java.util.Map
です。そうしないと、メソッドが表示されません。次に、書く必要があります。[]
?keys
setSimpleMapWrapper(false)
Map
map.keySet()
更新: 2.3.22 以降では、Java メソッド (および Java Bean プロパティ) は のように別の名前空間でアクセスできるため、メソッドとキーを混在させて使用することは強制されなくなりました (これは当時でもかなり混乱した回避策でした) ?api
。myMap?api.get(nonStringKey)
などmyMap?api.keySet()
。したがってObjectWrapper
、キーのみを公開し、機能Map
をサポートするを使用して?api
(できればobject_wrapper=DefaultObjectWrapper(2.3.22)
)、有効にして?api
(api_builtin_enabled=true
デフォルトでは後方セキュリティのために許可されていません)、?api
Java API 名前空間から何かが必要な場合にのみ使用し、それ以外の場合は使用できます。[]
、?keys
など。Map
キーがString
-s の場合。
以下の構文で試してください
<#assign keys = map?keys>
<#list keys as key>${key} = ${h[key]}; </#list>
EDIT - @ddekanyの回答を拡張し、
FTLを解析/呼び出すコードでこれを処理する必要があります。以下のようなものです(サンプルコードのみ)。ここに FTL 処理コードを追加できればもっと良かったかもしれません。
BeansWrapper ow = new BeansWrapper();
ow.setExposeFields(true);
// ow.setSimpleMapWrapper(true);
Template template = freeMarkerConfiguration.getTemplate(templateName, locale);
template.setObjectWrapper(ow);
template.process(root, writer);