异常-----freemarker.core.NonStringException

一,案例一

1.1、错误描述

 <html>
   <head>
     <meta http-equiv="content-type" content="text/html; charset=UTF-8">
     <title>freemarker基本数据类型</title>

   </head>

   <body>
           张三丰

      123,456

 Error on line 20, column 8 in type.ftl
 Expecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2
 The problematic instruction:
 ----------
 ==> ${flag} [on line 20, column 6 in type.ftl]
 ----------

 Java backtrace for programmers:
 ----------
 freemarker.core.NonStringException: Error on line 20, column 8 in type.ftl
 Expecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2
     at freemarker.core.Expression.getStringValue(Expression.java:126)
     at freemarker.core.Expression.getStringValue(Expression.java:93)
     at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
     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 com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77)
     at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:172)
     at com.you.test.freemarker.FreemarkerTest.testDataType(FreemarkerTest.java:159)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
     at java.lang.reflect.Method.invoke(Unknown Source)
     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
     at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
     at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
     at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
 五月 30, 2014 11:23:18 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error
 严重: Template processing error: "Error on line 20, column 8 in type.ftl\nExpecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2"

 Error on line 20, column 8 in type.ftl
 Expecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2
 The problematic instruction:
 ----------
 ==> ${flag} [on line 20, column 6 in type.ftl]
 ----------

 Java backtrace for programmers:
 ----------
 freemarker.core.NonStringException: Error on line 20, column 8 in type.ftl
 Expecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2
     at freemarker.core.Expression.getStringValue(Expression.java:126)
     at freemarker.core.Expression.getStringValue(Expression.java:93)
     at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
     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 com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77)
     at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:172)
     at com.you.test.freemarker.FreemarkerTest.testDataType(FreemarkerTest.java:159)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
     at java.lang.reflect.Method.invoke(Unknown Source)
     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
     at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
     at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
     at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

 Error on line 20, column 8 in type.ftl
 Expecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2
 The problematic instruction:
 ----------
 ==> ${flag} [on line 20, column 6 in type.ftl]
 ----------

 Java backtrace for programmers:
 ----------
 freemarker.core.NonStringException: Error on line 20, column 8 in type.ftl
 Expecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2
     at freemarker.core.Expression.getStringValue(Expression.java:126)
     at freemarker.core.Expression.getStringValue(Expression.java:93)
     at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
     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 com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77)
     at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:172)
     at com.you.test.freemarker.FreemarkerTest.testDataType(FreemarkerTest.java:159)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
     at java.lang.reflect.Method.invoke(Unknown Source)
     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
     at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
     at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
     at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

1.2、错误原因

 <#--定义布尔值-->
 <#assign flag = true/>
 ${flag}

不能直接输出除了字符串和数字之外的类型,否则会报错

1.3、解决办法

将布尔类型转换为字符串输出,使用${XXX?string}转换

 <#--定义布尔值-->
 <#assign flag = true/>
 ${flag?string}

结果:true

二,案例二

2.1,错误描述

 <html>
   <head>
     <meta http-equiv="content-type" content="text/html; charset=UTF-8">
     <title>freemarker</title>

   </head>

   <body>

 Error on line 12, column 12 in list.ftl
 Expecting a string, date or number here, Expression num is instead a freemarker.core.NumericalRange
 The problematic instruction:
 ----------
 ==> ${num} [on line 12, column 10 in list.ftl]
 ----------

 Java backtrace for programmers:
 ----------
 freemarker.core.NonStringException: Error on line 12, column 12 in list.ftl
 Expecting a string, date or number here, Expression num is instead a freemarker.core.NumericalRange
     at freemarker.core.Expression.getStringValue(Expression.java:126)
     at freemarker.core.Expression.getStringValue(Expression.java:93)
     at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
     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:179)
     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 com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77)
     at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:203)
     at com.you.test.freemarker.FreemarkerTest.testList(FreemarkerTest.java:190)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
     at java.lang.reflect.Method.invoke(Unknown Source)
     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
     at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
     at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
     at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
 六月 03, 2014 10:30:40 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error
 严重: Template processing error: "Error on line 12, column 12 in list.ftl\nExpecting a string, date or number here, Expression num is instead a freemarker.core.NumericalRange"

 Error on line 12, column 12 in list.ftl
 Expecting a string, date or number here, Expression num is instead a freemarker.core.NumericalRange
 The problematic instruction:
 ----------
 ==> ${num} [on line 12, column 10 in list.ftl]
 ----------

 Java backtrace for programmers:
 ----------
 freemarker.core.NonStringException: Error on line 12, column 12 in list.ftl
 Expecting a string, date or number here, Expression num is instead a freemarker.core.NumericalRange
     at freemarker.core.Expression.getStringValue(Expression.java:126)
     at freemarker.core.Expression.getStringValue(Expression.java:93)
     at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
     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:179)
     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 com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77)
     at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:203)
     at com.you.test.freemarker.FreemarkerTest.testList(FreemarkerTest.java:190)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
     at java.lang.reflect.Method.invoke(Unknown Source)
     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
     at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
     at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
     at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

 Error on line 12, column 12 in list.ftl
 Expecting a string, date or number here, Expression num is instead a freemarker.core.NumericalRange
 The problematic instruction:
 ----------
 ==> ${num} [on line 12, column 10 in list.ftl]
 ----------

 Java backtrace for programmers:
 ----------
 freemarker.core.NonStringException: Error on line 12, column 12 in list.ftl
 Expecting a string, date or number here, Expression num is instead a freemarker.core.NumericalRange
     at freemarker.core.Expression.getStringValue(Expression.java:126)
     at freemarker.core.Expression.getStringValue(Expression.java:93)
     at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
     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:179)
     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 com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77)
     at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:203)
     at com.you.test.freemarker.FreemarkerTest.testList(FreemarkerTest.java:190)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
     at java.lang.reflect.Method.invoke(Unknown Source)
     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
     at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
     at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
     at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

2.2、错误原因

 <#--freemarker定义了一个连续的序列-->
      <#assign nums=[1..100]/>
      <#list nums as num>
          ${num}
      </#list>

2.3、解决办法

去掉中括号,这样定义连续的序列:nums=1..100

1、错误描述

[plain] view plain copy
 
  1. <html>
  2. <head>
  3. <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  4. <title>freemarker基本数据类型</title>
  5. </head>
  6. <body>
  7. 张三丰
  8. 123,456
  9. Error on line 20, column 8 in type.ftl
  10. Expecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2
  11. The problematic instruction:
  12. ----------
  13. ==> ${flag} [on line 20, column 6 in type.ftl]
  14. ----------
  15. Java backtrace for programmers:
  16. ----------
  17. freemarker.core.NonStringException: Error on line 20, column 8 in type.ftl
  18. Expecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2
  19. at freemarker.core.Expression.getStringValue(Expression.java:126)
  20. at freemarker.core.Expression.getStringValue(Expression.java:93)
  21. at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
  22. at freemarker.core.Environment.visit(Environment.java:221)
  23. at freemarker.core.MixedContent.accept(MixedContent.java:92)
  24. at freemarker.core.Environment.visit(Environment.java:221)
  25. at freemarker.core.Environment.process(Environment.java:199)
  26. at freemarker.template.Template.process(Template.java:259)
  27. at com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77)
  28. at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:172)
  29. at com.you.test.freemarker.FreemarkerTest.testDataType(FreemarkerTest.java:159)
  30. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  31. at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  32. at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  33. at java.lang.reflect.Method.invoke(Unknown Source)
  34. at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
  35. at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
  36. at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
  37. at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
  38. at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
  39. at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
  40. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
  41. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
  42. at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
  43. at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
  44. at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
  45. at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
  46. at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
  47. at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
  48. at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
  49. at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
  50. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
  51. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
  52. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
  53. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
  54. 五月 30, 2014 11:23:18 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error
  55. 严重: Template processing error: "Error on line 20, column 8 in type.ftl\nExpecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2"
  56. Error on line 20, column 8 in type.ftl
  57. Expecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2
  58. The problematic instruction:
  59. ----------
  60. ==> ${flag} [on line 20, column 6 in type.ftl]
  61. ----------
  62. Java backtrace for programmers:
  63. ----------
  64. freemarker.core.NonStringException: Error on line 20, column 8 in type.ftl
  65. Expecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2
  66. at freemarker.core.Expression.getStringValue(Expression.java:126)
  67. at freemarker.core.Expression.getStringValue(Expression.java:93)
  68. at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
  69. at freemarker.core.Environment.visit(Environment.java:221)
  70. at freemarker.core.MixedContent.accept(MixedContent.java:92)
  71. at freemarker.core.Environment.visit(Environment.java:221)
  72. at freemarker.core.Environment.process(Environment.java:199)
  73. at freemarker.template.Template.process(Template.java:259)
  74. at com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77)
  75. at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:172)
  76. at com.you.test.freemarker.FreemarkerTest.testDataType(FreemarkerTest.java:159)
  77. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  78. at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  79. at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  80. at java.lang.reflect.Method.invoke(Unknown Source)
  81. at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
  82. at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
  83. at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
  84. at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
  85. at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
  86. at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
  87. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
  88. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
  89. at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
  90. at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
  91. at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
  92. at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
  93. at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
  94. at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
  95. at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
  96. at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
  97. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
  98. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
  99. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
  100. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
  101. Error on line 20, column 8 in type.ftl
  102. Expecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2
  103. The problematic instruction:
  104. ----------
  105. ==> ${flag} [on line 20, column 6 in type.ftl]
  106. ----------
  107. Java backtrace for programmers:
  108. ----------
  109. freemarker.core.NonStringException: Error on line 20, column 8 in type.ftl
  110. Expecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2
  111. at freemarker.core.Expression.getStringValue(Expression.java:126)
  112. at freemarker.core.Expression.getStringValue(Expression.java:93)
  113. at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
  114. at freemarker.core.Environment.visit(Environment.java:221)
  115. at freemarker.core.MixedContent.accept(MixedContent.java:92)
  116. at freemarker.core.Environment.visit(Environment.java:221)
  117. at freemarker.core.Environment.process(Environment.java:199)
  118. at freemarker.template.Template.process(Template.java:259)
  119. at com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77)
  120. at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:172)
  121. at com.you.test.freemarker.FreemarkerTest.testDataType(FreemarkerTest.java:159)
  122. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  123. at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  124. at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  125. at java.lang.reflect.Method.invoke(Unknown Source)
  126. at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
  127. at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
  128. at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
  129. at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
  130. at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
  131. at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
  132. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
  133. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
  134. at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
  135. at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
  136. at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
  137. at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
  138. at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
  139. at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
  140. at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
  141. at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
  142. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
  143. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
  144. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
  145. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

2、错误原因

[html] view plain copy
 
  1. <#--定义布尔值-->
  2. <#assign flag = true/>
  3. ${flag}

不能直接输出除了字符串和数字之外的类型,否则会报错

3、解决办法

将布尔类型转换为字符串输出,使用${XXX?string}转换

[html] view plain copy
 
  1. <#--定义布尔值-->
  2. <#assign flag = true/>
  3. ${flag?string}

结果:true

上一篇:JAVA对象转化JSON出现死循环问题


下一篇:解决: is not found. Have you run APT to generate them?