Re: macro errors

Sam Steingold <[email protected]>
Newsgroups gmane.comp.web.freemarker.user
Organization disorganization
Message-ID <[email protected]>
The following message is a courtesy copy of an article
that has been posted to gmane.comp.web.freemarker.user as well.

Thanks for your kind reply!

> * Daniel Dekany <[email protected]> [2012-07-25 10:59:16 +0200]:
> Wednesday, July 25, 2012, 6:09:00 AM, Sam Steingold wrote:
>> I am getting various macro errors:
>>
>> <#macro sentiment scmr model><#if scmr??>
>>   <#assign senti = "${scmr.results[model]}">
>>     <#if senti??>
>>       <td>${senti} ---- ${senti.sentimentType}</td>
>>       <td>${senti.score?html}</td>
>>     <#else><td align="center" colspan="2">none</td>
>>     </#if>
>> </#if></#macro>
>>
>> first error:
>>
>> POSITIVE(1.0/1) ---- Expected hash. senti evaluated instead to freemarker.template.SimpleScalar
>>
>> this is coming from "${senti} ---- ${senti.sentimentType}"
>> apparently, "senti" is the string representation of the object,
>> not the object itself.
>> how do I fix that?
>>
>> second error:
>>
>> Error executing macro: sentiment required parameter: scmr is not specified.
>>
>> this is coming from this invocation:
>>
>>  <@sentiment model=model scmr=result.title/>
>>
>> here `result' is non-null, but result.title is null.
>> I do check for that in the macro, but, apparently, it has to be done
>> outside.  Why?
>
> Yeah, the null-madness from the dark ages of FreeMarker, here to stay
> with us as far as backward compatibility is kept. Basically, it's
> suspected by FreeMarker that the expression result.title is a typo,
> and that's why it's undefined (null), hence the error. Now, maybe it's
> defined, like `result` is a JavaBean where you have a getTitle()
> method that returns null, but FreeMarker doesn't differentiate,
> because, if `result` is a Map on the Java-side and there's no title
> then there's indeed no "title" key (hence it can't be told if
> result.title is a typo or just Java-null). Surely you could tell that
> if `result` is a JavaBean, but you should be to able to switch
> back-and-forth between a JavaBean `result` and a Map `result` in the
> data-model without changing (breaking) the behavior of templates, so
> you get the common subset.

yes. result is a JavaBean in my case, and getTitle() is defined.

are you suggesting that "." denotes both hash table and field access?
i.e., I could have written scmr.results.model instead of
scmr.results[model], right?

> There's also an old implementation bug (that's kept for
> backward-compatibility), where, if you pass an undefined expression to
> a macro as a parameter (like even something that's indeed a typo), and
> the macro defines a default value for the parameter, that default
> value will kick in. So if you prefer, you can just do this:
>   <#macro sentiment scmr! model><#if scmr?is_sequence>
> and then you don't need the `!` when calling the macro.

I got
Encountered "!" at line 2, column 23 in com/addthis/sentiment/sentidemo.ftl.
Was expecting one of:
    "=" ...
    "..." ...
    "," ...
    ")" ...
    <ID> ...
    ">" ...

column 23 is "!" in scmr!


okay,  here is what seems to be working for me:

<#macro sentiment scmr model><#if scmr != ''>
  <#assign senti = scmr.results[model]>
    <#if senti??>
      <td>${senti.sentimentType}</td>
      <td>${senti.score?html}</td>
    <#else><td align="center" colspan="2">none</td>
    </#if>
</#if></#macro>


      <@sentiment model=model scmr=result.title! />
      <@sentiment model=model scmr=result.body! />
      <@sentiment model=model scmr=result.mean! />

the big question:
will the "<#if senti??>" test in the macro work as intended?
what is the value of "senti" anyway? a string? the java bean object?

thanks!

-- 
Sam Steingold (http://sds.podval.org/) on Ubuntu 12.04 (precise) X 11.0.11103000
http://www.childpsy.net/ http://pmw.org.il http://camera.org http://memri.org
http://iris.org.il http://dhimmi.com http://honestreporting.com
Genius is immortal, but morons live longer.

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
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.