Simulating null parameters in macros

"Hinkle, Cameron" <[email protected]>
Newsgroups gmane.comp.web.freemarker.user
Message-ID <[email protected]>
I asked this question on Stack Overflow but no one seemed to have an answer for me.  Hoping someone here will:

http://stackoverflow.com/questions/6553004/simulate-null-parameters-in-freemarker-macros



I'm building a site using Freemarker and have started heavily using macros. I know in Freemarker 2.3 that passing a null value into a macro as a parameter is equivalent to not passing a parameter at all so I've created a global variable called "null" to simulate null checking in my macros:

<#assign null="NUL" />

Now in my macros I can do this:

<#maco doSomething param1=null>

  <#if param1 != null>

    <div>WIN!</div>

  </#if>

</#macro>

The problem comes if I want to pass a parameter that isn't a scalar. For instance, passing a List (which in Freemarker is a SimpleSequence) to a macro and checking against my null keyword yields the error:

freemarker.template.TemplateException: The only legal comparisons are between two numbers, two strings, or two dates. Left hand operand is a freemarker.template.SimpleSequence Right hand operand is a freemarker.template.SimpleScalar

I took a look at the freemarker code and I can see the issue (ComparisonExpression.isTrue()):

if(ltm instanceof TemplateNumberModel && rtm instanceof TemplateNumberModel) {

  ...

}

else if(ltm instanceof TemplateDateModel && rtm instanceof TemplateDateModel) {

  ...

}

else if(ltm instanceof TemplateScalarModel && rtm instanceof TemplateScalarModel) {

  ...

}

else if(ltm instanceof TemplateBooleanModel && rtm instanceof TemplateBooleanModel) {

  ...

}

// Here we handle compatibility issues

else if(env.isClassicCompatible()) {

  ...

}

else {

  throw new TemplateException("The only legal comparisons...", env);

}

So the only solution I can think of is to set isClassicCompatible to true, which I think will call toString() on both objects and compare the result. However, the documentation specifically says anything relying on old features should be rewritten.

My quesion is, is there a solution to this that doesn't rely on deprecated features?


Thanks,
Cameron

Cameron Hinkle  |  Senior Application Engineer  |  Nike DCIT  |  503.532.3075  |  7. Evolve Immediately |

------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security 
threats, fraudulent activity, and more. Splunk takes this data and makes 
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2

_______________________________________________
FreeMarker-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freemarker-user
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.