0
Freemarkerでは、私はモデルにMap<Map<...>>
を持っています。Freemarker:?api可能なタイプをチェックする方法(v 2.3.26)
FMグリッチのため、第2レベルのクエリMap
には?api
が必要です。しかし、それは通常の価値の存在チェックを免れ、事を複雑にします。
これは私が持っているものです:私は
sortedStatsMap[rowTag.name]!?is_hash
をしようとすると不足している場合、それは私を与えるので、これはまた、失敗した
APINotSupportedTemplateException: The value doesn't support ?api. See requirements in the FreeMarker Manual.
(FTL type: sequence+extended_hash+string (wrapper: f.c.DefaultToExpression$EmptyStringAndSequence),
TemplateModel class: f.c.DefaultToExpression$EmptyStringAndSequence,
ObjectWapper: [email protected](2.3.26, useAdaptersForContainers=true, forceLegacyNonListCollections=true, iterableSupport=trueexposureLevel=1, exposeFields=false, treatDefaultMethodsAsBeanMembers=true, [email protected], ...))
The blamed expression:
==> sortedStatsMap[rowTag.name]! [in template "reports/templates/techReport-boxes.ftl" at line 152, column 84]
:
<#if sortedStatsMap[rowTag.name]?? && sortedStatsMap[rowTag.name]?is_hash>
${mapToJson(sortedStatsMap[rowTag.name]?api.get(boxTag.name))!}
</#if>
これはで終了報道によると、empty_string_and_sequence
と?is_hash
は適用できません。 (エラーの場合)
?api.get(key)
を使用できるかどうかを確認する適切なロジックは何ですか?または、欠損値や欠落したキーを処理するために!
を使用する正しい方法はありますか?
'?is_hash'は、' EmptyStringAndSequence'で動作する必要があります。しかし、私もそれを試して、それは私のために動作します。もう一度確認できますか? – ddekany
'boxTag.name'は常に'ヌル ''文字列 'ではありませんか?それがあれば、どんなFMグリッチに遭遇しましたか?あなたは '?api'を使用するよう強制しますか? – ddekany
'thisIsNull! 'の結果は'?api'をサポートしていないことは事実です。しかし、あなたのコードがどのように動くのかは分かりません。どこで '?api'を使うのか、'! 'は使わないのですか?この例は正確ですか? ( '?is_hash'はなぜ関係ないのですか?'?apiのサポートはハッシュとは関係ありません。) – ddekany