2011-12-20 3 views
4

J'ai une carte dont la clé et la valeur et les classes personnalisées. La classe de clé est appelée Position et est instancié avec deux int (par exemple new Position(2, 4).FreeMarker: Vérifier si la valeur de la carte est nulle

je me suis débarrassé de cette classe de position et converti la carte à un SimpleHash afin de l'utiliser avec Freemarker. J'ai maintenant une SimpleHash dont la clé est une chaîne reconfiguré valeurs de position (par exemple "2 4") et dont la valeur est soit null ou un

classe Lot (personnalisée). dans le modèle que je dois vérifier si la valeur d'un élément donné dans le SimpleMap (passé comme map) est soit null, soit une instance de 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> 

Comment faire?

Répondre

1

puisque freemarker est un peu bizarre quand il s'agit de valeurs nulles ont deux façons de le résoudre. 1.Treat comme une valeur manquante:

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

2.Juste converti en un que l'enregistrement chèque vrai/faux. Cela peut être fait en utilisant une classe utilitaire avec une fonction isNull (Object obj).

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

Ici, vous n'avez pas besoin d'utilitaires personnalisés. FreeMarker a quelques opérateurs dédiés pour traiter des valeurs nulles/manquantes (voir ma réponse ci-dessous). (La vérification '== true' semble aussi plutôt étrange ...)' utilClass.isNull' ne pourrait pas non plus indiquer une valeur nulle à partir d'une clé manquante, car elle obtient simplement ce que 'Map.get' renvoie, ce qui est' null Dans les deux cas. – ddekany

Questions connexes