Java 使用时模板处理错误?操作人员

Java 使用时模板处理错误?操作人员,java,freemarker,spark-java,Java,Freemarker,Spark Java,我试图使用report?is\u odd\u item查看循环中的索引是否为奇数,这会导致以下错误: SEVERE: Template processing error: "Error parsing included template sections/reports.ftl\nError on line 4, column 42, in template sections/reports.ftl\nFound is_odd_item, expecting one of: is_direct

我试图使用
report?is\u odd\u item
查看循环中的索引是否为奇数,这会导致以下错误:

SEVERE: Template processing error: "Error parsing included template sections/reports.ftl\nError on line 4, column 42, in template sections/reports.ftl\nFound is_odd_item, expecting one of:  is_directive,  parent,  js_string,  j_string,  uncap_first,  is_transform,  number,  is_hash,  trim,  children,  has_content,  iso_ms,  xml,  iso_utc,  byte,  double,  left_pad,  json_string,  matches,  capitalize,  number_to_datetime,  contains,  size,  iso_local_h_nz,  iso_utc_ms,  iso_local_m_nz,  is_collection,  long,  default,  iso_utc_h_nz,  iso_local_ms,  is_boolean,  last_index_of,  c,  iso_utc_m_nz,  is_macro,  rtf,  iso_utc_nz,  upper_case,  node_name,  reverse,  cap_first,  url,  is_hash_ex,  iso_nz,  is_enumerable,  exists,  number_to_date,  first,  iso_local,  date,  iso,  replace,  float,  right_pad,  datetime,  node_type,  split,  iso_ms_nz,  number_to_time,  is_sequence,  iso_utc_m,  html,  ancestors,  iso_utc_h,  iso_local_ms_nz,  new,  last,  sort,  eval,  lower_case,  web_safe,  is_date,  is_string,  iso_local_nz,  word_list,  seq_last_index_of,  node_namespace,  string,  keys,  iso_m_nz,  values,  seq_index_of,  chunk,  sort_by,  iso_m,  starts_with,  substring,  index_of,  iso_h,  root,  floor,  iso_h_nz,  ceiling,  if_exists,  chop_linebreak,  iso_local_h,  length,  is_indexable,  groups,  is_node,  iso_local_m,  int,  iso_utc_ms_nz,  xhtml,  ends_with,  round,  interpret,  is_method,  namespace,  short,  seq_contains,  time,  is_number in sections/reports.ftl"

Error parsing included template sections/reports.ftl
Error on line 4, column 42, in template sections/reports.ftl
Found is_odd_item, expecting one of:  is_directive,  parent,  js_string,  j_string,  uncap_first,  is_transform,  number,  is_hash,  trim,  children,  has_content,  iso_ms,  xml,  iso_utc,  byte,  double,  left_pad,  json_string,  matches,  capitalize,  number_to_datetime,  contains,  size,  iso_local_h_nz,  iso_utc_ms,  iso_local_m_nz,  is_collection,  long,  default,  iso_utc_h_nz,  iso_local_ms,  is_boolean,  last_index_of,  c,  iso_utc_m_nz,  is_macro,  rtf,  iso_utc_nz,  upper_case,  node_name,  reverse,  cap_first,  url,  is_hash_ex,  iso_nz,  is_enumerable,  exists,  number_to_date,  first,  iso_local,  date,  iso,  replace,  float,  right_pad,  datetime,  node_type,  split,  iso_ms_nz,  number_to_time,  is_sequence,  iso_utc_m,  html,  ancestors,  iso_utc_h,  iso_local_ms_nz,  new,  last,  sort,  eval,  lower_case,  web_safe,  is_date,  is_string,  iso_local_nz,  word_list,  seq_last_index_of,  node_namespace,  string,  keys,  iso_m_nz,  values,  seq_index_of,  chunk,  sort_by,  iso_m,  starts_with,  substring,  index_of,  iso_h,  root,  floor,  iso_h_nz,  ceiling,  if_exists,  chop_linebreak,  iso_local_h,  length,  is_indexable,  groups,  is_node,  iso_local_m,  int,  iso_utc_ms_nz,  xhtml,  ends_with,  round,  interpret,  is_method,  namespace,  short,  seq_contains,  time,  is_number in sections/reports.ftl
The problematic instruction:
----------
==> include sections[section] [on line 16, column 17 in layout.ftl]
----------

Java backtrace for programmers:
----------
freemarker.template.TemplateException: Error parsing included template sections/reports.ftl
Error on line 4, column 42, in template sections/reports.ftl
Found is_odd_item, expecting one of:  is_directive,  parent,  js_string,  j_string,  uncap_first,  is_transform,  number,  is_hash,  trim,  children,  has_content,  iso_ms,  xml,  iso_utc,  byte,  double,  left_pad,  json_string,  matches,  capitalize,  number_to_datetime,  contains,  size,  iso_local_h_nz,  iso_utc_ms,  iso_local_m_nz,  is_collection,  long,  default,  iso_utc_h_nz,  iso_local_ms,  is_boolean,  last_index_of,  c,  iso_utc_m_nz,  is_macro,  rtf,  iso_utc_nz,  upper_case,  node_name,  reverse,  cap_first,  url,  is_hash_ex,  iso_nz,  is_enumerable,  exists,  number_to_date,  first,  iso_local,  date,  iso,  replace,  float,  right_pad,  datetime,  node_type,  split,  iso_ms_nz,  number_to_time,  is_sequence,  iso_utc_m,  html,  ancestors,  iso_utc_h,  iso_local_ms_nz,  new,  last,  sort,  eval,  lower_case,  web_safe,  is_date,  is_string,  iso_local_nz,  word_list,  seq_last_index_of,  node_namespace,  string,  keys,  iso_m_nz,  values,  seq_index_of,  chunk,  sort_by,  iso_m,  starts_with,  substring,  index_of,  iso_h,  root,  floor,  iso_h_nz,  ceiling,  if_exists,  chop_linebreak,  iso_local_h,  length,  is_indexable,  groups,  is_node,  iso_local_m,  int,  iso_utc_ms_nz,  xhtml,  ends_with,  round,  interpret,  is_method,  namespace,  short,  seq_contains,  time,  is_number in sections/reports.ftl
        at freemarker.core.Include.accept(Include.java:162)
        at freemarker.core.Environment.visit(Environment.java:221)
        at freemarker.core.MixedContent.accept(MixedContent.java:92)
        at freemarker.core.Environment.visit(Environment.java:221)
        at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:167)
        at freemarker.core.Environment.visit(Environment.java:428)
        at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)
        at freemarker.core.Environment.visit(Environment.java:221)
        at freemarker.core.MixedContent.accept(MixedContent.java:92)
        at freemarker.core.Environment.visit(Environment.java:221)
        at freemarker.core.Environment.process(Environment.java:199)
        at freemarker.template.Template.process(Template.java:259)
        at spark.template.freemarker.FreeMarkerEngine.render(FreeMarkerEngine.java:70)
        at spark.TemplateViewRouteImpl$1.render(TemplateViewRouteImpl.java:61)
        at spark.TemplateViewRouteImpl$1.render(TemplateViewRouteImpl.java:58)
        at spark.TemplateViewRouteImpl.render(TemplateViewRouteImpl.java:86)
        at spark.http.matching.Routes.execute(Routes.java:62)
        at spark.http.matching.MatcherFilter.doFilter(MatcherFilter.java:128)
        at spark.embeddedserver.jetty.JettyHandler.doHandle(JettyHandler.java:50)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:189)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
        at org.eclipse.jetty.server.Server.handle(Server.java:517)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
        at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75)
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)
        at java.lang.Thread.run(Thread.java:745)
Caused by: freemarker.core.ParseException: Error on line 4, column 42, in template sections/reports.ftl
Found is_odd_item, expecting one of:  is_directive,  parent,  js_string,  j_string,  uncap_first,  is_transform,  number,  is_hash,  trim,  children,  has_content,  iso_ms,  xml,  iso_utc,  byte,  double,  left_pad,  json_string,  matches,  capitalize,  number_to_datetime,  contains,  size,  iso_local_h_nz,  iso_utc_ms,  iso_local_m_nz,  is_collection,  long,  default,  iso_utc_h_nz,  iso_local_ms,  is_boolean,  last_index_of,  c,  iso_utc_m_nz,  is_macro,  rtf,  iso_utc_nz,  upper_case,  node_name,  reverse,  cap_first,  url,  is_hash_ex,  iso_nz,  is_enumerable,  exists,  number_to_date,  first,  iso_local,  date,  iso,  replace,  float,  right_pad,  datetime,  node_type,  split,  iso_ms_nz,  number_to_time,  is_sequence,  iso_utc_m,  html,  ancestors,  iso_utc_h,  iso_local_ms_nz,  new,  last,  sort,  eval,  lower_case,  web_safe,  is_date,  is_string,  iso_local_nz,  word_list,  seq_last_index_of,  node_namespace,  string,  keys,  iso_m_nz,  values,  seq_index_of,  chunk,  sort_by,  iso_m,  starts_with,  substring,  index_of,  iso_h,  root,  floor,  iso_h_nz,  ceiling,  if_exists,  chop_linebreak,  iso_local_h,  length,  is_indexable,  groups,  is_node,  iso_local_m,  int,  iso_utc_ms_nz,  xhtml,  ends_with,  round,  interpret,  is_method,  namespace,  short,  seq_contains,  time,  is_number in sections/reports.ftl
        at freemarker.core.BuiltIn.newBuiltIn(BuiltIn.java:255)
        at freemarker.core.FMParser.BuiltIn(FMParser.java:795)
        at freemarker.core.FMParser.AddSubExpression(FMParser.java:731)
        at freemarker.core.FMParser.PrimaryExpression(FMParser.java:278)
        at freemarker.core.FMParser.UnaryExpression(FMParser.java:324)
        at freemarker.core.FMParser.MultiplicativeExpression(FMParser.java:440)
        at freemarker.core.FMParser.AdditiveExpression(FMParser.java:390)
        at freemarker.core.FMParser.RangeExpression(FMParser.java:561)
        at freemarker.core.FMParser.RelationalExpression(FMParser.java:516)
        at freemarker.core.FMParser.EqualityExpression(FMParser.java:481)
        at freemarker.core.FMParser.AndExpression(FMParser.java:590)
        at freemarker.core.FMParser.OrExpression(FMParser.java:613)
        at freemarker.core.FMParser.Expression(FMParser.java:226)
        at freemarker.core.FMParser.If(FMParser.java:1175)
        at freemarker.core.FMParser.FreemarkerDirective(FMParser.java:2377)
        at freemarker.core.FMParser.Content(FMParser.java:2623)
        at freemarker.core.FMParser.OptionalBlock(FMParser.java:2791)
        at freemarker.core.FMParser.List(FMParser.java:1262)
        at freemarker.core.FMParser.FreemarkerDirective(FMParser.java:2380)
        at freemarker.core.FMParser.Content(FMParser.java:2623)
        at freemarker.core.FMParser.OptionalBlock(FMParser.java:2791)
        at freemarker.core.FMParser.Root(FMParser.java:2963)
        at freemarker.template.Template.<init>(Template.java:171)
        at freemarker.cache.TemplateCache.loadTemplate(TemplateCache.java:447)
        at freemarker.cache.TemplateCache.getTemplate(TemplateCache.java:360)
        at freemarker.cache.TemplateCache.getTemplate(TemplateCache.java:235)
        at freemarker.template.Configuration.getTemplate(Configuration.java:578)
        at freemarker.core.Environment.getTemplateForInclusion(Environment.java:1490)
        at freemarker.core.Include.accept(Include.java:157)
        ... 32 more
严重:模板处理错误:“分析包含的模板节/报表时出错。ftl\n在模板节/报表的第4行第42列出现错误。ftl\n查找为奇数项,应为以下项之一:is_指令、父项、js_字符串、j_字符串、uncap_first、is_变换、数字、is_哈希、修剪、子项、has_内容、iso_ms、xml、iso_utc、字节、双精度、左_pad、json_字符串。”,匹配、大写、数字到日期时间、包含、大小、iso_local_h_nz、iso_utc_ms、iso_local_m_nz、is_collection、long、default、iso_utc_h_nz、iso_local_nz、is_boolean、最后一个索引、c、iso_utc_m_nz、is_宏、rtf、iso_utc_nz、大写字母、节点名称、反向、大写字母、url、is_hash_ex、iso_可枚举、存在、,数字到时间,第一,iso本地,日期,iso,替换,浮点,右键盘,日期时间,节点类型,拆分,iso ms新西兰,数字到时间,是序列,iso utc m,html,祖先,iso utc h,iso本地ms新西兰,新,最后,排序,求值,小写,网络安全,is日期,is字符串,iso本地,单词列表,序号最后索引,node_名称空间、字符串、键、iso_m_nz、值、seq_index_of、chunk、sort by、iso_m、start_with、substring、index_of、iso_h、root、floor、iso_h_nz、ceiling、if_存在、chop_linebreak、iso_local_h、length、is_indexable、groups、is_node、iso_local_m、int、iso_utc_ms_nz、xhtml、end_with、round、is_方法,namespace,short,seq_contains,time,是sections/reports.ftl中的编号”
分析包含的模板节/reports.ftl时出错
模板节/reports.ftl第4行第42列出错
找到的是奇数项,应为以下项之一:is_指令、父项、js_字符串、j_字符串、uncap_first、is_转换、数字、is_哈希、修剪、子项、has_内容、iso_ms、xml、iso_utc、byte、double、left_pad、json_字符串、匹配项、大写、数字_到日期时间、包含项、大小、iso_本地_h_nz、iso_utc_本地_m_nz、is_collec选项,长,默认值,iso_utc_h_nz,iso_local_ms,is_boolean,最后一个索引,c,iso_utc_m_nz,is_macro,rtf,iso_utc_nz,大写,节点名称,反转,大写,url,is_hash_ex,iso_nz,可枚举,存在,编号到日期,第一,iso_local,日期,iso,替换,浮点,右键盘,日期时间,节点类型,拆分,iso_ms_nz,数字到时间,is_顺序,iso_utc_m,html,祖先,iso_utc_h,iso_local_ms_nz,new,last,sort,eval,lower_case,web_safe,is_date,is_string,iso_local_nz,word_list,seq_last_index of,node_命名空间,字符串,键,iso_m_nz,值,seq_index of,chunk,sort_by,iso_m,以,substring,index开始,iso_h,根,地板,iso_h_nz,天花板,如果存在,切碎线,iso_局部_h,长度,可索引,组,is_节点,iso_局部_m,int,iso_utc_ms_nz,xhtml,结尾为,圆形,解释,is_方法,命名空间,短,序列包含,时间,is_编号在节/reports.ftl中
有问题的指令:
----------
==>包括节[section][layout.ftl中第16行第17列]
----------
程序员的Java回溯:
----------
freemarker.template.TemplateException:分析包含的模板节/reports.ftl时出错
模板节/reports.ftl第4行第42列出错
找到的是奇数项,应为以下项之一:is_指令、父项、js_字符串、j_字符串、uncap_first、is_转换、数字、is_哈希、修剪、子项、has_内容、iso_ms、xml、iso_utc、byte、double、left_pad、json_字符串、匹配项、大写、数字_到日期时间、包含项、大小、iso_本地_h_nz、iso_utc_本地_m_nz、is_collec选项,长,默认值,iso_utc_h_nz,iso_local_ms,is_boolean,最后一个索引,c,iso_utc_m_nz,is_macro,rtf,iso_utc_nz,大写,节点名称,反转,大写,url,is_hash_ex,iso_nz,可枚举,存在,编号到日期,第一,iso_local,日期,iso,替换,浮点,右键盘,日期时间,节点类型,拆分,iso_ms_nz,数字到时间,is_顺序,iso_utc_m,html,祖先,iso_utc_h,iso_local_ms_nz,new,last,sort,eval,lower_case,web_safe,is_date,is_string,iso_local_nz,word_list,seq_last_index of,node_命名空间,字符串,键,iso_m_nz,值,seq_index of,chunk,sort_by,iso_m,以,substring,index开始,iso_h,根,地板,iso_h_nz,天花板,如果存在,切碎线,iso_局部_h,长度,可索引,组,is_节点,iso_局部_m,int,iso_utc_ms_nz,xhtml,结尾为,圆形,解释,is_方法,命名空间,短,序列包含,时间,is_编号在节/reports.ftl中
位于freemarker.core.Include.accept(Include.java:162)
访问(Environment.java:221)
位于freemarker.core.MixedContent.accept(MixedContent.java:92)
访问(Environment.java:221)
位于freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:167)
访问(Environment.java:428)
在freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)中
访问(Environment.java:221)
位于freemarker.core.MixedContent.accept(MixedContent.java:92)
访问(Environment.java:221)
位于freemarker.core.Environment.process(Environment.java:199)
位于freemarker.template.template.process(template.java:259)
位于spark.template.freemarker.freemakerengine.render(freemakerengine.java:70)
位于spark.TemplateViewRouteImpl$1.render(TemplateViewRouteImpl.java:61)
位于spark.TemplateViewRouteImpl$1.render(TemplateViewRouteImpl.java:58)
在spark.TemplateViewRouteImpl.render(TemplateViewRouteImpl.java:86)中
在spark.http.matching.Routes.execute(Routes.ja)中
<#list reports as report>
    <p><#if report?is_odd_item>left<#else>right</#if></p>
</#list>

Line 4: <#if report?is_odd_item>>
                   ^ (column 42)
<#list reports as report >
    <p>${report?item_cycle('left', 'right')}</p>
</#list>