cancel
Showing results for 
Search instead for 
Did you mean: 

Template examples and FreeMarker

fouellet
Champ in-the-making
Champ in-the-making
I was trying the template samples and got errors with the <#list> directive while trying to product a list of objects. I am new to FreeMarker, but it seems that the variable assigned with "as" cannot be used… For example, even simple stuff like:

<#list ["one", "two", "three"] as n>
  ${n}
</#list>
returns the error such as "Expression n is undefined at line…" with a long  Java backtrace. Direct reference to properties such as  ${userhome.children[0].name} work fine.

Looks like a variable scope issue.

Anything to do with the FreeMarker service? I am using enterprise RC1 on Linux.

Thanks,  :roll:
2 REPLIES 2

kevinr
Star Contributor
Star Contributor
Hello,

I tried the simple template code you mentioned:

<#list ["one", "two", "three"] as n>
${n}
</#list>

and it worked just fine. We are using much more complex templates than this without any problems.

Can you tell me more about your setup?

Thanks,

Kevin

fouellet
Champ in-the-making
Champ in-the-making
I am using the RC1 distribution for Tomcat on Fedora Core 3, all plain vanilla settings. The only customizations made were a few language packs, everything else is original. 

I am not sure where to look, it seems like a variable scoping or namespace issue. I tried using the global directive but the variables don't seem to "stay" in the namespace after they get created. I can get all the values from the repository objects, but cannot use variables of my own. The ftl file is in the repository, as a Content Template. I did not try using an outside file.

CLASSPATH is defined as /opt/alfresco/tomcat/webapps/alfresco/WEB-INF/lib

Here is the complete output:

===========================

<#list ["one", "two", "three"] as n>

Expression n is undefined on line 1, column 283 in workspace://SpacesStore/c12bdd80-5546-11da-9a4d-db39df59542d.

The problematic instruction:
———-
==> ${n} [on line 1, column 281 in workspace://SpacesStore/c12bdd80-5546-11da-9a4d-db39df59542d]
———-

Java backtrace for programmers:
———-
freemarker.core.InvalidReferenceException: Expression n is undefined on line 1, column 283 in workspace://SpacesStore/c12bdd80-5546-11da-9a4d-db39df59542d.
   at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124)
   at freemarker.core.Expression.getStringValue(Expression.java:118)
   at freemarker.core.Expression.getStringValue(Expression.java:93)
   at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
   at freemarker.core.Environment.visit(Environment.java:196)
   at freemarker.core.MixedContent.accept(MixedContent.java:92)
   at freemarker.core.Environment.visit(Environment.java:196)
   at freemarker.core.Environment.process(Environment.java:176)
   at freemarker.template.Template.process(Template.java:231)
   at org.alfresco.web.ui.repo.component.template.FreeMarkerProcessor.process(FreeMarkerProcessor.java:104)
   at org.alfresco.web.ui.repo.component.template.UITemplate.encodeBegin(UITemplate.java:128)
   at javax.faces.webapp.UIComponentTag.encodeBegin(UIComponentTag.java:337)
   at javax.faces.webapp.UIComponentTag.doStartTag(UIComponentTag.java:224)
   at org.apache.jsp.jsp.dialog.preview_002dfile_jsp._jspx_meth_r_template_0(org.apache.jsp.jsp.dialog.preview_002dfile_jsp:1307)
   at org.apache.jsp.jsp.dialog.preview_002dfile_jsp._jspService(org.apache.jsp.jsp.dialog.preview_002dfile_jsp:547)
   at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
   at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
   at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
   at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
   at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
   at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
   at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
   at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
   at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:415)
   at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:234)
   at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:300)
   at javax.faces.webapp.FacesServlet.service(FacesServlet.java:95)
   at org.alfresco.web.app.servlet.AlfrescoFacesServlet.service(AlfrescoFacesServlet.java:49)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
   at org.alfresco.web.app.servlet.ModeDetectionFilter.doFilter(ModeDetectionFilter.java:59)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
   at org.alfresco.web.app.servlet.AuthenticationFilter.doFilter(AuthenticationFilter.java:68)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
   at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
   at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
   at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
   at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
   at java.lang.Thread.run(Thread.java:595)