一,案例一
假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个魔咒,假如你想体验BAT的工作环境,那么现在请我们一起开启提升技术之旅吧,详情请点击
1.1、错误描述
1 五月 30, 2014 11:33:57 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 2 严重: Template processing error: "Expected hash. flag evaluated instead to freemarker.template.TemplateBooleanModel$2 on line 21, column 8 in type.ftl." 3 4 Expected hash. flag evaluated instead to freemarker.template.TemplateBooleanModel$2 on line 21, column 8 in type.ftl. 5 The problematic instruction: 6 ---------- 7 ==> ${flag.color?string} [on line 21, column 6 in type.ftl] 8 ---------- 9 10 Java backtrace for programmers: 11 ---------- 12 freemarker.template.TemplateException: Expected hash. flag evaluated instead to freemarker.template.TemplateBooleanModel$2 on line 21, column 8 in type.ftl. 13 at freemarker.core.TemplateObject.invalidTypeException(TemplateObject.java:136) 14 at freemarker.core.Dot._getAsTemplateModel(Dot.java:78) 15 at freemarker.core.Expression.getAsTemplateModel(Expression.java:89) 16 at freemarker.core.BuiltIn$stringBI._getAsTemplateModel(BuiltIn.java:408) 17 at freemarker.core.Expression.getAsTemplateModel(Expression.java:89) 18 at freemarker.core.Expression.getStringValue(Expression.java:93) 19 at freemarker.core.DollarVariable.accept(DollarVariable.java:76) 20 at freemarker.core.Environment.visit(Environment.java:221) 21 at freemarker.core.MixedContent.accept(MixedContent.java:92) 22 at freemarker.core.Environment.visit(Environment.java:221) 23 at freemarker.core.Environment.process(Environment.java:199) 24 at freemarker.template.Template.process(Template.java:259) 25 at com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77) 26 at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:172) 27 at com.you.test.freemarker.FreemarkerTest.testDataType(FreemarkerTest.java:159) 28 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 29 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 30 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 31 at java.lang.reflect.Method.invoke(Unknown Source) 32 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 33 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 34 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 35 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 36 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 37 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 38 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 39 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 40 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 41 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 42 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 43 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 44 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 45 at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 46 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 47 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 48 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 49 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 50 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 51 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 52 53 54 Expected hash. flag evaluated instead to freemarker.template.TemplateBooleanModel$2 on line 21, column 8 in type.ftl. 55 The problematic instruction: 56 ---------- 57 ==> ${flag.color?string} [on line 21, column 6 in type.ftl] 58 ---------- 59 60 Java backtrace for programmers: 61 ---------- 62 freemarker.template.TemplateException: Expected hash. flag evaluated instead to freemarker.template.TemplateBooleanModel$2 on line 21, column 8 in type.ftl. 63 at freemarker.core.TemplateObject.invalidTypeException(TemplateObject.java:136) 64 at freemarker.core.Dot._getAsTemplateModel(Dot.java:78) 65 at freemarker.core.Expression.getAsTemplateModel(Expression.java:89) 66 at freemarker.core.BuiltIn$stringBI._getAsTemplateModel(BuiltIn.java:408) 67 at freemarker.core.Expression.getAsTemplateModel(Expression.java:89) 68 at freemarker.core.Expression.getStringValue(Expression.java:93) 69 at freemarker.core.DollarVariable.accept(DollarVariable.java:76) 70 at freemarker.core.Environment.visit(Environment.java:221) 71 at freemarker.core.MixedContent.accept(MixedContent.java:92) 72 at freemarker.core.Environment.visit(Environment.java:221) 73 at freemarker.core.Environment.process(Environment.java:199) 74 at freemarker.template.Template.process(Template.java:259) 75 at com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77) 76 at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:172) 77 at com.you.test.freemarker.FreemarkerTest.testDataType(FreemarkerTest.java:159) 78 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 79 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 80 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 81 at java.lang.reflect.Method.invoke(Unknown Source) 82 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 83 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 84 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 85 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 86 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 87 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 88 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 89 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 90 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 91 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 92 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 93 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 94 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 95 at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 96 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 97 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 98 99 100 101freemarker基本数据类型 102 103 104 105 106 张三丰107 108 123,456109 110 true111 112 Expected hash. flag evaluated instead to freemarker.template.TemplateBooleanModel$2 on line 21, column 8 in type.ftl.113 The problematic instruction:114 ----------115 ==> ${flag.color?string} [on line 21, column 6 in type.ftl]116 ----------117 118 Java backtrace for programmers:119 ----------120 freemarker.template.TemplateException: Expected hash. flag evaluated instead to freemarker.template.TemplateBooleanModel$2 on line 21, column 8 in type.ftl.121 at freemarker.core.TemplateObject.invalidTypeException(TemplateObject.java:136)122 at freemarker.core.Dot._getAsTemplateModel(Dot.java:78)123 at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)124 at freemarker.core.BuiltIn$stringBI._getAsTemplateModel(BuiltIn.java:408)125 at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)126 at freemarker.core.Expression.getStringValue(Expression.java:93)127 at freemarker.core.DollarVariable.accept(DollarVariable.java:76)128 at freemarker.core.Environment.visit(Environment.java:221)129 at freemarker.core.MixedContent.accept(MixedContent.java:92)130 at freemarker.core.Environment.visit(Environment.java:221)131 at freemarker.core.Environment.process(Environment.java:199)132 at freemarker.template.Template.process(Template.java:259)133 at com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77)134 at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:172)135 at com.you.test.freemarker.FreemarkerTest.testDataType(FreemarkerTest.java:159)136 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)137 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)138 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)139 at java.lang.reflect.Method.invoke(Unknown Source)140 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)141 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)142 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)143 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)144 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)145 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)146 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)147 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)148 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)149 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)150 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)151 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)152 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)153 at org.junit.runners.ParentRunner.run(ParentRunner.java:300)154 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)155 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)156 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)157 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)158 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)159 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)160 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)161 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)162 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)163 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
1.2、错误原因
1 <#--定义布尔值-->2 <#assign flag = true/>3 ${flag?string}4 ${flag.color?string}
因为flag已经定义为true,再次定义会报错
1.3、解决办法
修改变量名,将flag修改为num
1 ${(num.color)???string}
结果:false
二,案例二
2.1、错误描述
1 六月 04, 2014 10:31:47 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 2 严重: Template processing error: "Expected number, sequence, or string. maps evaluated instead to freemarker.core.HashLiteral$SequenceHash on line 11, column 12 in map.ftl." 3 4 Expected number, sequence, or string. maps evaluated instead to freemarker.core.HashLiteral$SequenceHash on line 11, column 12 in map.ftl. 5 The problematic instruction: 6 ---------- 7 ==> ${maps[3]} [on line 11, column 10 in map.ftl] 8 ---------- 9 10 Java backtrace for programmers: 11 ---------- 12 freemarker.template.TemplateException: Expected number, sequence, or string. maps evaluated instead to freemarker.core.HashLiteral$SequenceHash on line 11, column 12 in map.ftl. 13 at freemarker.core.TemplateObject.invalidTypeException(TemplateObject.java:136) 14 at freemarker.core.DynamicKeyName.dealWithNumericalKey(DynamicKeyName.java:125) 15 at freemarker.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:90) 16 at freemarker.core.Expression.getAsTemplateModel(Expression.java:89) 17 at freemarker.core.Expression.getStringValue(Expression.java:93) 18 at freemarker.core.DollarVariable.accept(DollarVariable.java:76) 19 at freemarker.core.Environment.visit(Environment.java:221) 20 at freemarker.core.MixedContent.accept(MixedContent.java:92) 21 at freemarker.core.Environment.visit(Environment.java:221) 22 at freemarker.core.Environment.process(Environment.java:199) 23 at freemarker.template.Template.process(Template.java:259) 24 at com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77) 25 at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:210) 26 at com.you.test.freemarker.FreemarkerTest.testMap(FreemarkerTest.java:197) 27 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 28 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 29 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 30 at java.lang.reflect.Method.invoke(Unknown Source) 31 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 32 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 33 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 34 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 35 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 36 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 37 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 38 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 39 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 40 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 41 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 42 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 43 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 44 at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 45 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 46 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 47 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 48 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 49 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 50 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 51 52 53 54 55freemarker 56 57 58 59 60 61 Expected number, sequence, or string. maps evaluated instead to freemarker.core.HashLiteral$SequenceHash on line 11, column 12 in map.ftl. 62 The problematic instruction: 63 ---------- 64 ==> ${maps[3]} [on line 11, column 10 in map.ftl] 65 ---------- 66 67 Java backtrace for programmers: 68 ---------- 69 freemarker.template.TemplateException: Expected number, sequence, or string. maps evaluated instead to freemarker.core.HashLiteral$SequenceHash on line 11, column 12 in map.ftl. 70 at freemarker.core.TemplateObject.invalidTypeException(TemplateObject.java:136) 71 at freemarker.core.DynamicKeyName.dealWithNumericalKey(DynamicKeyName.java:125) 72 at freemarker.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:90) 73 at freemarker.core.Expression.getAsTemplateModel(Expression.java:89) 74 at freemarker.core.Expression.getStringValue(Expression.java:93) 75 at freemarker.core.DollarVariable.accept(DollarVariable.java:76) 76 at freemarker.core.Environment.visit(Environment.java:221) 77 at freemarker.core.MixedContent.accept(MixedContent.java:92) 78 at freemarker.core.Environment.visit(Environment.java:221) 79 at freemarker.core.Environment.process(Environment.java:199) 80 at freemarker.template.Template.process(Template.java:259) 81 at com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77) 82 at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:210) 83 at com.you.test.freemarker.FreemarkerTest.testMap(FreemarkerTest.java:197) 84 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 85 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 86 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 87 at java.lang.reflect.Method.invoke(Unknown Source) 88 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 89 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 90 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 91 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 92 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 93 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 94 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 95 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 96 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 97 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 98 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 99 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)100 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)101 at org.junit.runners.ParentRunner.run(ParentRunner.java:300)102 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)103 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)104 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)105 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)106 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)107 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)108 109 Expected number, sequence, or string. maps evaluated instead to freemarker.core.HashLiteral$SequenceHash on line 11, column 12 in map.ftl.110 The problematic instruction:111 ----------112 ==> ${maps[3]} [on line 11, column 10 in map.ftl]113 ----------114 115 Java backtrace for programmers:116 ----------117 freemarker.template.TemplateException: Expected number, sequence, or string. maps evaluated instead to freemarker.core.HashLiteral$SequenceHash on line 11, column 12 in map.ftl.118 at freemarker.core.TemplateObject.invalidTypeException(TemplateObject.java:136)119 at freemarker.core.DynamicKeyName.dealWithNumericalKey(DynamicKeyName.java:125)120 at freemarker.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:90)121 at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)122 at freemarker.core.Expression.getStringValue(Expression.java:93)123 at freemarker.core.DollarVariable.accept(DollarVariable.java:76)124 at freemarker.core.Environment.visit(Environment.java:221)125 at freemarker.core.MixedContent.accept(MixedContent.java:92)126 at freemarker.core.Environment.visit(Environment.java:221)127 at freemarker.core.Environment.process(Environment.java:199)128 at freemarker.template.Template.process(Template.java:259)129 at com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77)130 at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:210)131 at com.you.test.freemarker.FreemarkerTest.testMap(FreemarkerTest.java:197)132 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)133 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)134 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)135 at java.lang.reflect.Method.invoke(Unknown Source)136 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)137 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)138 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)139 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)140 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)141 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)142 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)143 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)144 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)145 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)146 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)147 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)148 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)149 at org.junit.runners.ParentRunner.run(ParentRunner.java:300)150 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)151 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)152 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)153 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)154 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)155 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
2.2、错误原因
1 <#--freemarker HashMap取值-->2 <#assign maps={"1":"张三丰","2":"李思思","3":"张三强","4":"王五"}/>3 ${maps[3]}
map取值时是要取序列、数字、字符串
2.3,解决办法
${maps["3"]}
三,案例三
3.1,错误描述
1 2 3 4freemarker处理哈希表的内建函数 5 6 7 8 9 张三强 10 11 12 Expected collection or sequence. maps evaluated instead to freemarker.core.HashLiteral$SequenceHash on line 13, column 17 in map.ftl. 13 The problematic instruction: 14 ---------- 15 ==> list maps as map [on line 13, column 10 in map.ftl] 16 ---------- 17 18 Java backtrace for programmers: 19 ---------- 20 freemarker.template.TemplateException: Expected collection or sequence. maps evaluated instead to freemarker.core.HashLiteral$SequenceHash on line 13, column 17 in map.ftl. 21 at freemarker.core.TemplateObject.invalidTypeException(TemplateObject.java:136) 22 at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:190) 23 at freemarker.core.Environment.visit(Environment.java:428) 24 at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102) 25 at freemarker.core.Environment.visit(Environment.java:221) 26 at freemarker.core.MixedContent.accept(MixedContent.java:92) 27 at freemarker.core.Environment.visit(Environment.java:221) 28 at freemarker.core.Environment.process(Environment.java:199) 29 at freemarker.template.Template.process(Template.java:259) 30 at com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77) 31 at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:210) 32 at com.you.test.freemarker.FreemarkerTest.testMap(FreemarkerTest.java:197) 33 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 34 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 35 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 36 at java.lang.reflect.Method.invoke(Unknown Source) 37 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 38 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 39 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 40 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 41 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 42 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 43 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 44 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 45 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 46 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 47 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 48 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 49 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 50 at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 51 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 52 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 53 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 54 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 55 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 56 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 57 六月 04, 2014 10:52:14 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 58 严重: Template processing error: "Expected collection or sequence. maps evaluated instead to freemarker.core.HashLiteral$SequenceHash on line 13, column 17 in map.ftl." 59 60 Expected collection or sequence. maps evaluated instead to freemarker.core.HashLiteral$SequenceHash on line 13, column 17 in map.ftl. 61 The problematic instruction: 62 ---------- 63 ==> list maps as map [on line 13, column 10 in map.ftl] 64 ---------- 65 66 Java backtrace for programmers: 67 ---------- 68 freemarker.template.TemplateException: Expected collection or sequence. maps evaluated instead to freemarker.core.HashLiteral$SequenceHash on line 13, column 17 in map.ftl. 69 at freemarker.core.TemplateObject.invalidTypeException(TemplateObject.java:136) 70 at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:190) 71 at freemarker.core.Environment.visit(Environment.java:428) 72 at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102) 73 at freemarker.core.Environment.visit(Environment.java:221) 74 at freemarker.core.MixedContent.accept(MixedContent.java:92) 75 at freemarker.core.Environment.visit(Environment.java:221) 76 at freemarker.core.Environment.process(Environment.java:199) 77 at freemarker.template.Template.process(Template.java:259) 78 at com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77) 79 at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:210) 80 at com.you.test.freemarker.FreemarkerTest.testMap(FreemarkerTest.java:197) 81 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 82 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 83 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 84 at java.lang.reflect.Method.invoke(Unknown Source) 85 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 86 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 87 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 88 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 89 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 90 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 91 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 92 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 93 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 94 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 95 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 96 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 97 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 98 at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 99 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)100 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)101 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)102 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)103 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)104 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)105 106 107 Expected collection or sequence. maps evaluated instead to freemarker.core.HashLiteral$SequenceHash on line 13, column 17 in map.ftl.108 The problematic instruction:109 ----------110 ==> list maps as map [on line 13, column 10 in map.ftl]111 ----------112 113 Java backtrace for programmers:114 ----------115 freemarker.template.TemplateException: Expected collection or sequence. maps evaluated instead to freemarker.core.HashLiteral$SequenceHash on line 13, column 17 in map.ftl.116 at freemarker.core.TemplateObject.invalidTypeException(TemplateObject.java:136)117 at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:190)118 at freemarker.core.Environment.visit(Environment.java:428)119 at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)120 at freemarker.core.Environment.visit(Environment.java:221)121 at freemarker.core.MixedContent.accept(MixedContent.java:92)122 at freemarker.core.Environment.visit(Environment.java:221)123 at freemarker.core.Environment.process(Environment.java:199)124 at freemarker.template.Template.process(Template.java:259)125 at com.you.freemarker.FreemarkerTemplate.printFtl(FreemarkerTemplate.java:77)126 at com.you.test.freemarker.FreemarkerTest.studentPrint(FreemarkerTest.java:210)127 at com.you.test.freemarker.FreemarkerTest.testMap(FreemarkerTest.java:197)128 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)129 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)130 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)131 at java.lang.reflect.Method.invoke(Unknown Source)132 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)133 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)134 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)135 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)136 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)137 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)138 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)139 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)140 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)141 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)142 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)143 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)144 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)145 at org.junit.runners.ParentRunner.run(ParentRunner.java:300)146 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)147 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)148 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)149 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)150 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)151 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
3.2,错误原因
maps不是一个序列,不能用list遍历map
1 <#--freemarker HashMap取值-->2 <#assign maps={"1":"张三丰","2":"李思思","3":"张三强","4":"王五"}>3 ${maps["3"]}4 5 <#list maps as map>6 ${map}7
3.3、解决办法
先获取map中的key值,再通过key值序列遍历map
1 <#--freemarker HashMap取值-->2 <#assign maps={"1":"张三丰","2":"李思思","3":"张三强","4":"王五"}>3 ${maps["3"]}4 5 <#assign keys=maps?keys>6 <#list keys as key>7 ${key}----${maps[key]}8