web-dev-qa-db-ja.com

との差 ?? 、has_content、if_existsはfreemarkerにあります

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は同じことをチェックしますか?

57
user3606002

??は、左側のオペランドの値が欠落しているか(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は、priceuserから欠落している場合のみ処理しますが、user自体が欠落している場合は処理しません。両方の可能性をカバーするには、(user.price)!0を使用します。これは、()の評価中にスローされたすべての欠落変数エラーを処理します。

127
ddekany