异常-----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、错误描述
- <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)
 
2、错误原因
- <#--定义布尔值-->
 - <#assign flag = true/>
 - ${flag}
 
不能直接输出除了字符串和数字之外的类型,否则会报错
3、解决办法
将布尔类型转换为字符串输出,使用${XXX?string}转换
- <#--定义布尔值-->
 - <#assign flag = true/>
 - ${flag?string}
 
结果:true
异常-----freemarker.core.NonStringException的更多相关文章
- 异常-----freemarker.core.ParseException: Encountered
		
1.错误描述 freemarker.core.ParseException: Encountered " " at line 14, column 12 in myself.ftl ...
 - 异常-----freemarker.core.ParseException: Unexpected end of file reached
		
freemarker自定义标签 1.错误描述 freemarker.core.ParseException: Unexpected end of file reached. at freemarker ...
 - 异常-----freemarker.core.ParseException: Encountered "string"
		
1.错误描述 freemarker.core.ParseException: Encountered "string" at line 21, column 21 in type. ...
 - 异常-----freemarker.core.InvalidReferenceException问题解决
		
案例一 1.1.错误描述 五月 28, 2014 9:56:48 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template ...
 - 异常-----freemarker.core.ParseException: Token manager error
		
一,案例一 1.1.错误描述 freemarker.core.ParseException: Token manager error: freemarker.core.TokenMgrError: L ...
 - 异常-----freemarker.template.TemplateException: Expected collection or sequence. datas evaluated instead to freemarker.core.HashLiteral$SequenceHash on line 7, column 18 in inc/select.ftl.
		
1.错误描述 六月 26, 2014 11:26:27 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template proc ...
 - cosbench 异常 FreeMarker template error: The following has evaluated to null or missing
		
问题现象: 使用Cosbench 0.4.2.c4 版本测试Ceph RGW read test失败,遇到异常如下: FreeMarker template error: The following ...
 - freemarker.core.InvalidReferenceException: Expression stackObject.value.get(propertyName).toString() is undefined
		
很奇怪的报错, 在实体中添加 toString方法后, 想在前台列表中使用 <s:debug标签调试, 发现报错如下: freemarker.core.InvalidReferenceExcep ...
 - freemarker.core.InvalidReferenceException
		
1.错误描述 freemarker.core.InvalidReferenceException:on line 68,column 18 in ftl/inc/incPro.ftl p.mainSe ...
 
随机推荐
- 关于node的基础理论,书上看来的
			
最近看了一本书,说了一些Node.js的东西,现在来记录一下,让自己记得更牢靠一点. 在书上,是这样介绍的:Node.js模型是源于Ruby的Event Machine 和 Python的Twiste ...
 - main函数的实现解析
			
main函数的传参的实现,其实也是一个解析字符串的过程:将每个word后一个空格改为“/0”,将单词提取出来. 就是这么简单. 废话不多说,直接上代码: #include<stdio.h> ...
 - 把页面的Table直接输出到Excel文件中
			
有个需求是统计的时候,为生成的html表格提供导出功能,但是这样导出Excel不会显示自身的表格 影响美观,但是excel会显示html的css样式,这里可以通过处理行对象的方式进行导出,但是处理起纵 ...
 - Jenkins持续集成-自动化部署脚本的实现
			
要实现Jenkins端的持续集成,其实在CI服务配置端很容易,难点呢?就是如何实现自动化的部署.我的脚本设计就是为了解决以下难题: 难点一.如何使得自动化部署脚本更通用 我用的脚本,依赖依赖一个配置文 ...
 - python并发编程之多进程(一):进程开启方式&多进程
			
一,进程的开启方式 利用模块开启进程 from multiprocessing import Process import time,random import os def piao(name): ...
 - Shell 编程入门
			
首先创建一个文件: 在终端中输入如下命令: vi helloworld.sh 然后按i进行命令编写 下面这句话是必须写的 #!/bin/sh这句话是必须写的 #!/bin/sh a="hel ...
 - Mysql--Database Exception (#42) 数据库错误
			
mysql是phpstudy中的mysql,出现这个错误八成是php.ini中没有设置mysql.sock 使用探针或者phpinfo查看php.ini的位置. sudo find / -name m ...
 - Sphinx下载、安装、配置、Hello World、文档阅读
			
sphinx下载.安装.配置.Hello World.查看文档
 - CentOS常用命令搜集
			
centos是32或者64位:getconf LONG_BIT
 - python str与bytes之间的转换
			
# bytes object b = b"example" # str object s = "example" # str to bytes bytes(s, ...