Re: freemarker error: Expected hash, evaluated instead to ...
Daniel Dekany <[email protected]>
| Newsgroups | gmane.comp.web.freemarker.user |
|---|---|
| Message-ID | <[email protected]> |
Wednesday, December 16, 2009, 2:03:10 PM, Jake Ochs wrote:
> I've created a custom collection that implements iterator and returns
> another custom object - NotesDocWrapper (wraps a Lotus Domino Document
> object.) My template then lists the docs collection I placed in the root
> hash and iterates over the doc accessing a field like so:
> <#list docs as doc>
> <li>${doc.Subject}</li>
> </#list>
> The NotesDocWrapper implements TemplateModel and has a get method so it
> can return a Notes Document field using the standard template dot syntax
> as used above. I've used the NotesDocWrapper by itself, dropping it into
> the root hash successfully, but when I attempt to nest it in this manner
> I get a freemarker exception (see full stacktrace at bottom of post)
>
> How do I prevent Freemarker from expecting a hash instead of using the
> wrapper I supplied for the nested object? (assuming this is the problem)
> Any tips are appreciated.
Exactly what does NotesDocWrapper extend and implement? It should
implement TemplateHashModel (or TemplateHashModelEx).
--
Best regards,
Daniel Dekany
> -----BEGIN STACKTRACE-----
> Expected hash. doc evaluated instead to
> com.cmti.freemarker.NotesDocWrapper on line 9, column 7 in VETest1.ftl.
> The problematic instruction:
> ----------
==>> ${doc.Subject} [on line 9, column 5 in VETest1.ftl]
> ----------
>
> Java backtrace for programmers:
> ----------
> freemarker.template.TemplateException: Expected hash. doc evaluated
> instead to com.cmti.freemarker.NotesDocWrapper on line 9, column 7 in
> VETest1.ftl.
> at
> freemarker.core.TemplateObject.invalidTypeException(TemplateObject.java:135)
> at freemarker.core.Dot._getAsTemplateModel(Dot.java:78)
> at
> freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
> at
> freemarker.core.Expression.getStringValue(Expression.java:93)
> at
> freemarker.core.DollarVariable.accept(DollarVariable.java:76)
> at freemarker.core.Environment.visit(Environment.java:209)
> at freemarker.core.MixedContent.accept(MixedContent.java:92)
> at freemarker.core.Environment.visit(Environment.java:209)
> at
> freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:167)
> at freemarker.core.Environment.visit(Environment.java:416)
> at
> freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)
> at freemarker.core.Environment.visit(Environment.java:209)
> at freemarker.core.MixedContent.accept(MixedContent.java:92)
> at freemarker.core.Environment.visit(Environment.java:209)
> at freemarker.core.Environment.process(Environment.java:189)
> at freemarker.template.Template.process(Template.java:237)
> at FreemarkerTester.main(FreemarkerTester.java:54)
------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev