zoukankan      html  css  js  c++  java
  • freemarker自己定义标签报错(七)

    1、错误描写叙述

    六月 09, 2014 11:11:09 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error
    严重: Template processing error: "Expression a is undefined on line 27, column 23 in tag.ftl."
    
    Expression a is undefined on line 27, column 23 in tag.ftl.
    The problematic instruction:
    ----------
    ==> ${a} [on line 27, column 21 in tag.ftl]
     in user-directive tag [on line 25, column 6 in tag.ftl]
    ----------
    
    Java backtrace for programmers:
    ----------
    freemarker.core.InvalidReferenceException: Expression a is undefined on line 27, column 23 in tag.ftl.
    	at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:125)
    	at freemarker.core.Expression.getStringValue(Expression.java:118)
    	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.visit(Environment.java:406)
    	at freemarker.core.BodyInstruction.accept(BodyInstruction.java:93)
    	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.Macro$Context.runMacro(Macro.java:172)
    	at freemarker.core.Environment.visit(Environment.java:614)
    	at freemarker.core.UnifiedCall.accept(UnifiedCall.java:106)
    	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:224)
    	at com.you.test.freemarker.FreemarkerTest.testTag(FreemarkerTest.java:211)
    	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)
    
    
    Expression a is undefined on line 27, column 23 in tag.ftl.
    The problematic instruction:
    ----------
    ==> ${a} [on line 27, column 21 in tag.ftl]
     in user-directive tag [on line 25, column 6 in tag.ftl]
    ----------
    
    Java backtrace for programmers:
    ----------
    freemarker.core.InvalidReferenceException: Expression a is undefined on line 27, column 23 in tag.ftl.
    	at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:125)
    	at freemarker.core.Expression.getStringValue(Expression.java:118)
    	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.visit(Environment.java:406)
    	at freemarker.core.BodyInstruction.accept(BodyInstruction.java:93)
    	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.Macro$Context.runMacro(Macro.java:172)
    	at freemarker.core.Environment.visit(Environment.java:614)
    	at freemarker.core.UnifiedCall.accept(UnifiedCall.java:106)
    	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:224)
    	at com.you.test.freemarker.FreemarkerTest.testTag(FreemarkerTest.java:211)
    	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)
    <html>
      <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <title>freemarker自己定义标签</title>
    
      </head>
      
      <body>
              
    	           <h1>张三。你好1</h1>
    	           <h1>张三。你好2</h1>
    	           <h1>张三,你好3</h1>
    	           <h1>张三。你好4</h1>
    	           <h1>张三,你好5</h1>
    	           <h1>张三,你好6</h1>
    	           <h1>张三。你好7</h1>
    	           <h1>张三。你好8</h1>
    	           <h1>张三。你好9</h1>
    	           <h1>张三,你好10</h1>
    	           <h1>张三,你好11</h1>
    	           <h1>张三,你好12</h1>
    	           <h1>张三,你好13</h1>
    	           <h1>张三,你好14</h1>
    	           <h1>张三,你好15</h1>
    	           <h1>张三,你好16</h1>
    	           <h1>张三,你好17</h1>
    	           <h1>张三,你好18</h1>
    	           <h1>张三,你好19</h1>
    	           <h1>张三,你好20</h1>
    	           <h1>张三,你好21</h1>
    	           <h1>张三。你好22</h1>
    	           <h1>张三。你好23</h1>
    	           <h1>张三。你好24</h1>
    	           <h1>张三,你好25</h1>
    	           <h1>张三。你好26</h1>
    	           <h1>张三,你好27</h1>
    	           <h1>张三,你好28</h1>
    	           <h1>张三。你好29</h1>
    	           <h1>张三,你好30</h1>
    	           <h1>张三,你好31</h1>
    	           <h1>张三。你好32</h1>
    	           <h1>张三,你好33</h1>
    	           <h1>张三。你好34</h1>
    	           <h1>张三。你好35</h1>
    	           <h1>张三。你好36</h1>
    	           <h1>张三。你好37</h1>
    	           <h1>张三。你好38</h1>
    	           <h1>张三。你好39</h1>
    	           <h1>张三,你好40</h1>
         
         
             <ul>
               <li>1----45----78</li>
             </ul>
             <ul>
               <li>1----
    Expression a is undefined on line 27, column 23 in tag.ftl.
    The problematic instruction:
    ----------
    ==> ${a} [on line 27, column 21 in tag.ftl]
     in user-directive tag [on line 25, column 6 in tag.ftl]
    ----------
    
    Java backtrace for programmers:
    ----------
    freemarker.core.InvalidReferenceException: Expression a is undefined on line 27, column 23 in tag.ftl.
    	at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:125)
    	at freemarker.core.Expression.getStringValue(Expression.java:118)
    	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.visit(Environment.java:406)
    	at freemarker.core.BodyInstruction.accept(BodyInstruction.java:93)
    	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.Macro$Context.runMacro(Macro.java:172)
    	at freemarker.core.Environment.visit(Environment.java:614)
    	at freemarker.core.UnifiedCall.accept(UnifiedCall.java:106)
    	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:224)
    	at com.you.test.freemarker.FreemarkerTest.testTag(FreemarkerTest.java:211)
    	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、错误原因

    <#macro tag>
              <#nested 45 78/>
              <#nested/>
              <#nested/>
              <#nested/>
         </#macro>
         
         <@tag;a,b>
             <ul>
               <li>1----${a}----${b}</li>
             </ul>
         </@tag>

       nested没有所有赋值


    3、解决的方法

    <#macro tag>
              <#nested 45 78/>
              <#nested 56 12/>
              <#nested 23 69/>
              <#nested 44 98/>
         </#macro>
         
         <@tag;a,b>
             <ul>
               <li>1----${a}----${b}</li>
             </ul>
         </@tag>

    结果:

    <ul>
               <li>1----45----78</li>
             </ul>
             <ul>
               <li>1----56----12</li>
             </ul>
             <ul>
               <li>1----23----69</li>
             </ul>
             <ul>
               <li>1----44----98</li>
             </ul>


    通过这样的參数能够获取自己定义指令中的变量


  • 相关阅读:
    mybatis-01-简单概述基础点
    04-书城缺少方法
    03-书城bean类中的id缺少get属性
    02-书城传参类型异常
    执行Oracle存储过程报权限不足的解决方法
    创建表空间及用户的SQL
    Oracle instr函数与SqlServer charindex的区别
    利用ExtJS导出Excel
    Java循环日期
    Oracle给不同组数据添加顺序
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5091134.html
Copyright © 2011-2022 走看看