一,案例一
假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个魔咒,假如你想体验BAT的工作环境,那么现在请我们一起开启提升技术之旅吧,详情请点击http://106.12.206.16:8080/qingruihappy/index.html
1.1、错误描述
1 <html> 2 <head> 3 <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 4 <title>freemarker基本数据类型</title> 5 6 </head> 7 8 <body> 9 张三丰 10 11 123,456 12 13 14 Error on line 20, column 8 in type.ftl 15 Expecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2 16 The problematic instruction: 17 ---------- 18 ==> ${flag} [on line 20, column 6 in type.ftl] 19 ---------- 20 21 Java backtrace for programmers: 22 ---------- 23 freemarker.core.NonStringException: Error on line 20, column 8 in type.ftl 24 Expecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2 25 at freemarker.core.Expression.getStringValue(Expression.java:126) 26 at freemarker.core.Expression.getStringValue(Expression.java:93) 27 at freemarker.core.DollarVariable.accept(DollarVariable.java:76) 28 at freemarker.core.Environment.visit(Environment.java:221) 29 at freemarker.core.MixedContent.accept(MixedContent.java:92) 30 at freemarker.core.Environment.visit(Environment.java:221) 31 at freemarker.core.Environment.process(Environment.java:199) 32 at freemarker.template.Template.process(Template.java:259) 33 at com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77) 34 at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:172) 35 at com.you.test.freemarker.FreemarkerTest.testDataType(FreemarkerTest.java:159) 36 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 37 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 38 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 39 at java.lang.reflect.Method.invoke(Unknown Source) 40 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 41 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 42 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 43 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 44 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 45 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 46 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 47 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 48 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 49 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 50 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 51 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 52 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 53 at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 54 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 55 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 56 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 57 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 58 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 59 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 60 五月 30, 2014 11:23:18 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 61 严重: 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" 62 63 Error on line 20, column 8 in type.ftl 64 Expecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2 65 The problematic instruction: 66 ---------- 67 ==> ${flag} [on line 20, column 6 in type.ftl] 68 ---------- 69 70 Java backtrace for programmers: 71 ---------- 72 freemarker.core.NonStringException: Error on line 20, column 8 in type.ftl 73 Expecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2 74 at freemarker.core.Expression.getStringValue(Expression.java:126) 75 at freemarker.core.Expression.getStringValue(Expression.java:93) 76 at freemarker.core.DollarVariable.accept(DollarVariable.java:76) 77 at freemarker.core.Environment.visit(Environment.java:221) 78 at freemarker.core.MixedContent.accept(MixedContent.java:92) 79 at freemarker.core.Environment.visit(Environment.java:221) 80 at freemarker.core.Environment.process(Environment.java:199) 81 at freemarker.template.Template.process(Template.java:259) 82 at com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77) 83 at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:172) 84 at com.you.test.freemarker.FreemarkerTest.testDataType(FreemarkerTest.java:159) 85 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 86 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 87 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 88 at java.lang.reflect.Method.invoke(Unknown Source) 89 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 90 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 91 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 92 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 93 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 94 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 95 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 96 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 97 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 98 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 99 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 100 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 101 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 102 at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 103 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 104 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 105 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 106 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 107 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 108 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 109 110 111 Error on line 20, column 8 in type.ftl 112 Expecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2 113 The problematic instruction: 114 ---------- 115 ==> ${flag} [on line 20, column 6 in type.ftl] 116 ---------- 117 118 Java backtrace for programmers: 119 ---------- 120 freemarker.core.NonStringException: Error on line 20, column 8 in type.ftl 121 Expecting a string, date or number here, Expression flag is instead a freemarker.template.TemplateBooleanModel$2 122 at freemarker.core.Expression.getStringValue(Expression.java:126) 123 at freemarker.core.Expression.getStringValue(Expression.java:93) 124 at freemarker.core.DollarVariable.accept(DollarVariable.java:76) 125 at freemarker.core.Environment.visit(Environment.java:221) 126 at freemarker.core.MixedContent.accept(MixedContent.java:92) 127 at freemarker.core.Environment.visit(Environment.java:221) 128 at freemarker.core.Environment.process(Environment.java:199) 129 at freemarker.template.Template.process(Template.java:259) 130 at com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77) 131 at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:172) 132 at com.you.test.freemarker.FreemarkerTest.testDataType(FreemarkerTest.java:159) 133 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 134 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 135 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 136 at java.lang.reflect.Method.invoke(Unknown Source) 137 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 138 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 139 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 140 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 141 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 142 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 143 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 144 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 145 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 146 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 147 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 148 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 149 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 150 at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 151 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 152 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 153 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 154 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 155 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 156 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
1.2、错误原因
1 <#--定义布尔值--> 2 <#assign flag = true/> 3 ${flag}
不能直接输出除了字符串和数字之外的类型,否则会报错
1.3、解决办法
将布尔类型转换为字符串输出,使用${XXX?string}转换
1 <#--定义布尔值--> 2 <#assign flag = true/> 3 ${flag?string}
结果:true
二,案例二
2.1,错误描述
1 <html> 2 <head> 3 <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 4 <title>freemarker</title> 5 6 </head> 7 8 <body> 9 10 Error on line 12, column 12 in list.ftl 11 Expecting a string, date or number here, Expression num is instead a freemarker.core.NumericalRange 12 The problematic instruction: 13 ---------- 14 ==> ${num} [on line 12, column 10 in list.ftl] 15 ---------- 16 17 Java backtrace for programmers: 18 ---------- 19 freemarker.core.NonStringException: Error on line 12, column 12 in list.ftl 20 Expecting a string, date or number here, Expression num is instead a freemarker.core.NumericalRange 21 at freemarker.core.Expression.getStringValue(Expression.java:126) 22 at freemarker.core.Expression.getStringValue(Expression.java:93) 23 at freemarker.core.DollarVariable.accept(DollarVariable.java:76) 24 at freemarker.core.Environment.visit(Environment.java:221) 25 at freemarker.core.MixedContent.accept(MixedContent.java:92) 26 at freemarker.core.Environment.visit(Environment.java:221) 27 at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:179) 28 at freemarker.core.Environment.visit(Environment.java:428) 29 at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102) 30 at freemarker.core.Environment.visit(Environment.java:221) 31 at freemarker.core.MixedContent.accept(MixedContent.java:92) 32 at freemarker.core.Environment.visit(Environment.java:221) 33 at freemarker.core.Environment.process(Environment.java:199) 34 at freemarker.template.Template.process(Template.java:259) 35 at com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77) 36 at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:203) 37 at com.you.test.freemarker.FreemarkerTest.testList(FreemarkerTest.java:190) 38 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 39 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 40 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 41 at java.lang.reflect.Method.invoke(Unknown Source) 42 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 43 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 44 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 45 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 46 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 47 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 48 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 49 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 50 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 51 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 52 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 53 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 54 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 55 at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 56 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 57 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 58 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 59 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 60 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 61 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 62 六月 03, 2014 10:30:40 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 63 严重: 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" 64 65 Error on line 12, column 12 in list.ftl 66 Expecting a string, date or number here, Expression num is instead a freemarker.core.NumericalRange 67 The problematic instruction: 68 ---------- 69 ==> ${num} [on line 12, column 10 in list.ftl] 70 ---------- 71 72 Java backtrace for programmers: 73 ---------- 74 freemarker.core.NonStringException: Error on line 12, column 12 in list.ftl 75 Expecting a string, date or number here, Expression num is instead a freemarker.core.NumericalRange 76 at freemarker.core.Expression.getStringValue(Expression.java:126) 77 at freemarker.core.Expression.getStringValue(Expression.java:93) 78 at freemarker.core.DollarVariable.accept(DollarVariable.java:76) 79 at freemarker.core.Environment.visit(Environment.java:221) 80 at freemarker.core.MixedContent.accept(MixedContent.java:92) 81 at freemarker.core.Environment.visit(Environment.java:221) 82 at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:179) 83 at freemarker.core.Environment.visit(Environment.java:428) 84 at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102) 85 at freemarker.core.Environment.visit(Environment.java:221) 86 at freemarker.core.MixedContent.accept(MixedContent.java:92) 87 at freemarker.core.Environment.visit(Environment.java:221) 88 at freemarker.core.Environment.process(Environment.java:199) 89 at freemarker.template.Template.process(Template.java:259) 90 at com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77) 91 at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:203) 92 at com.you.test.freemarker.FreemarkerTest.testList(FreemarkerTest.java:190) 93 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 94 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 95 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 96 at java.lang.reflect.Method.invoke(Unknown Source) 97 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 98 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 99 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 100 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 101 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 102 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 103 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 104 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 105 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 106 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 107 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 108 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 109 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 110 at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 111 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 112 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 113 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 114 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 115 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 116 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 117 118 119 Error on line 12, column 12 in list.ftl 120 Expecting a string, date or number here, Expression num is instead a freemarker.core.NumericalRange 121 The problematic instruction: 122 ---------- 123 ==> ${num} [on line 12, column 10 in list.ftl] 124 ---------- 125 126 Java backtrace for programmers: 127 ---------- 128 freemarker.core.NonStringException: Error on line 12, column 12 in list.ftl 129 Expecting a string, date or number here, Expression num is instead a freemarker.core.NumericalRange 130 at freemarker.core.Expression.getStringValue(Expression.java:126) 131 at freemarker.core.Expression.getStringValue(Expression.java:93) 132 at freemarker.core.DollarVariable.accept(DollarVariable.java:76) 133 at freemarker.core.Environment.visit(Environment.java:221) 134 at freemarker.core.MixedContent.accept(MixedContent.java:92) 135 at freemarker.core.Environment.visit(Environment.java:221) 136 at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:179) 137 at freemarker.core.Environment.visit(Environment.java:428) 138 at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102) 139 at freemarker.core.Environment.visit(Environment.java:221) 140 at freemarker.core.MixedContent.accept(MixedContent.java:92) 141 at freemarker.core.Environment.visit(Environment.java:221) 142 at freemarker.core.Environment.process(Environment.java:199) 143 at freemarker.template.Template.process(Template.java:259) 144 at com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77) 145 at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:203) 146 at com.you.test.freemarker.FreemarkerTest.testList(FreemarkerTest.java:190) 147 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 148 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 149 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 150 at java.lang.reflect.Method.invoke(Unknown Source) 151 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 152 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 153 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 154 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 155 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 156 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 157 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 158 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 159 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 160 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 161 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 162 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 163 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 164 at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 165 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 166 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 167 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 168 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 169 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 170 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
2.2、错误原因
1 <#--freemarker定义了一个连续的序列--> 2 <#assign nums=[1..100]/> 3 <#list nums as num> 4 ${num} 5 </#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