freemarkerの次の違いは何ですか?
!
has_content
??
if_exists
使用しましたか? has_contentの代わりに、このような大きな問題が発生します。私の一日を台無しにしました。私は本当にこのことを明確にする必要があります。
使用したとき
!(xyz.abc!)?? -- it dint work
使用したとき
!(xyz.abc!)?has_content ... it did work
しませんか? OR has_content OR if_existsは同じことをチェックしますか?
??
は、左側のオペランドの値が欠落しているか(Java null
か、そこに未定義の変数があることを意味します)、false
(欠落)またはtrue
(欠落していない)を返します。
?has_content
は??
と非常によく似ていますが、長さ0の文字列または空のFTLシーケンス(Java.util.List
、Java配列など)または空のFTLハッシュ(Java.util.Map
など)に対してfalse
も返します。 (0
、ブール値false
などの場合はfalse
を返しません。)
!
は、color!"no color"
のように、値が欠落している場合(ここでもJava null
または未定義の変数があることを意味します)にデフォルト値を与えるために使用されます。 !
の右側のオペランドを省略すると、デフォルト値は、空の文字列と空のシーケンスおよび空のハッシュを同時に(マルチタイプの値)します。これは、<#list things! as thing>
、${foo!}
などの記述に便利です。
?if_exists
は??
を書く古い方法です。使用しないでください。
ここにいる間、これらの演算子はすべて、ドット付き式または[]
式の最後のステップのみをカバーすることに注意してください。user.price!0
は、price
がuser
から欠落している場合のみ処理しますが、user
自体が欠落している場合は処理しません。両方の可能性をカバーするには、(user.price)!0
を使用します。これは、()
の評価中にスローされたすべての欠落変数エラーを処理します。