2017-09-12 5 views
0

Je travaille actuellement sur la pièce de composant, je besoin d'une instruction if autre à faire pour filtrer wether un objet page est nulle ou non, ici est mes tentatives:Comment définir si l'objet est égal à zéro dans magnolias freemarker (.ftl)

[#assign page = cmsfn.page(component)] 
[#if page IS NULL ] // not working... 
    [@cms.component content=cmsfn.asContentMap(component) editable=false/] 
[/#if] 

et celui-ci

[#assign page = cmsfn.page(component)] 
[#if !page?has_content ] // not working... 
    [@cms.component content=cmsfn.asContentMap(component) editable=false/] 
[/#if] 

ce que je suis en train de faire ici est, si l'objet de la page est nulle, alors faites-le déchirants composant, ces objets page sont les enfants JRC nœuds , lors du rendu du composant ce type de noeud gâcher le modèle de chose, donc je dois filtrer et assurez-vous que le p age est nul, puis rend.

Des suggestions? Merci de me fournir un exemple de code. Remerciements

Répondre

2

La langue de modèle de FreeMarker (2.x) a cette ... quirk, qu'elle n'a pas une valeur null. Ainsi, vous ne pouvez pas stocker null dans une variable. Lorsque vous avez foo.barbar correspond à Java getBar() qui renvoie null, alors en ce qui concerne le langage de modèle, foo ne contient tout simplement pas bar. Et, se référant à quelque chose qui n'existe pas est illégal, sauf si vous appliquez un opérateur null/gestionnaire manquant directement sur l'expression de référence (comme foo.bar!'myDefault' ou foo.bar??).

Ainsi, l'approche la plus simple est d'éviter l'affectation comme [#if cmsfn.page(component)??]...[/#if]. Mais parfois, ce n'est pas acceptable que vous devez obtenir le page pour une deuxième fois plus bas. Vous pouvez ensuite utiliser une valeur par défaut que vous pouvez différencier de la valeur par défaut. En supposant que pour un page objet ?has_content donne true (et sauf si vous utilisez un étrange ObjectWrapper il fait), une valeur par défaut comme {} (hash vide) suffit. L'opérateur exp! peut être utilisé comme raccourci, car il donne également une valeur par défaut pour laquelle ?has_content est faux:

[#assign page = cmsfn.page(component)!] 
[#if page?has_content] 
    [@cms.component content=cmsfn.asContentMap(component) editable=false/] 
    ... Do something with `page`, otherwise we need not use #assign. 
[#else] 
    ... Don't do anything with `page`, it's that strange default object. 
[/#if]