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

本文介绍在Freemarker模板中输出布尔类型的常见错误及其解决办法,包括如何正确显示布尔值,避免模板处理错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一,案例一

假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过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、错误描述

 

[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.   
  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)  


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值