web-dev-qa-db-ja.com

Velocity、文字列が空でヌルではないかどうかをチェックする最も効率的な方法は何ですか

文字列値が存在しない場合や空の場合がよくあります。これは、この状態をテストする最良の方法ですか?

#if( $incentive.disclaimer && $!incentive.disclaimer != '' ) 
   $incentive.disclaimer 
#end
27
rsturim

Velocityに値を表示する場合、または存在しない場合は何も表示しない場合は、 quiet reference 自体でトリックを行います:

$!incentive.disclaimer

空を明示的にテストしたい場合は、 StringUtils from Apache Commons Lang が役立ちます。最初にコンテキストに追加します(参照 here ):

context.put("StringUtils", StringUtils.class);

ただし、古いバージョンのVelocityを使用している場合、クラス参照が気に入らない可能性があるため、代わりにインスタンスを追加できます。

context.put("StringUtils", new StringUtils());

次に、Velocityテンプレートから isEmpty メソッドを呼び出します。

#if($StringUtils.isEmpty($incentive.disclaimer))
    ## logic here...
#end

空白を空として扱う場合は、 isBlank もあります。

36
Evan Haas

ただ$!incentive.disclaimerは適合しません http://wiki.Apache.org/velocity/CheckingForNull は短い解決策を示唆しています:

#if( "$!car.fuel" != "" )
32
Vadzim

静かな参照表記が必要な場合:$!incentive.disclaimer

Bla bla $!incentive.disclaimer. 

$ incentive.disclaimernullまたは ""、Velocityはレンダリングします:

Bla bla .

公式のガイドセクションを参照してください: https://velocity.Apache.org/engine/devel/user-guide.html#quiet-reference-notation

場合によっては#ifが必要になることがあります

#ifが必要な場合の最も一般的なケース:変数は大きなテキストの一部であり、変数が空の場合は表示したくない場合。次に、これが必要です:

#if($incentive.disclaimer && !$incentive.disclaimer.empty) 
    Please read our incentive disclaimer:
    $incentive.disclaimer
#end
15
DenisS