2011-12-20 25 views
4

キーと値とカスタムクラスを持つマップがあります。キークラスはPositionと呼ばれ、たとえばnew Position(2, 4)のための2つのint(でインスタンス化されます。FreeMarker:マップ値がnullであるかどうかを確認します。

私はこのポジションのクラスを取り除くとFreemarkerのでそれを使用するためにSimpleHashにマップを変換してしまった。私は今、そのキーSimpleHashを持っています位置(例えば"2 4"用)の値と値null又はLot(カスタム)クラスのいずれかで再マッピング文字列である。

IはSimpleMapに与えられたアイテムの値が(mapとして渡されたかどうかを確認する必要があるテンプレートで)がnullまたはLotインスタンスのいずれかである場合

 <#list mapMinY..mapMaxY as y> 
      <tr> 
       <#list mapMinX..mapMaxX as x> 
        <td> 
         <div> 
          <!-- Check if map[x + " " + y] is null --> 
          ${x}, ${y} 
         </div> 
        </td> 
       </#list> 
      </tr> 
     </#list> 

どのようにするには?

答えて

1

freemarkerはnull値になると奇妙なので、それを解決するには2つの方法があります。欠損値としてそれ1.Treat :真/偽のチェックにチェックイン

${map[x + " " + y]!} 
    do Stuff 
${map[x + " " + y]!} 

2.Just変換。 これは、isNull(Object obj)関数を使用してユーティリティクラスを使用して行うことができます。

utilClass.isNull(map[x + " " + y])==true 
+0

ここにカスタムユーティリティは必要ありません。 FreeMarkerには、ヌル/欠損値を処理するためのかなりの専用演算子があります(下記の私の答えを見てください)。 ( '== true'チェックもむしろ奇妙に見えます)' utilClass.isNull'は欠落しているキーからもnullを返すことができませんでした。基本的には 'Map.get'が返すものを取得するだけです。両方の場合において、 – ddekany

7

??オペレータを使用してください。

<#if map[x + " " + y]??>It's not null<#else>It's null or missing</#if> 

the related part of the Manualも参照してください。

関連する問題