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

     freemarker自定义标签


    1、错误描述

    六月 05, 2014 11:31:35 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error
    严重: Template processing error: "Error executing macro: write
    required parameter: nums is not specified."
    
    Error executing macro: write
    required parameter: nums is not specified.
    The problematic instruction:
    ----------
    ==> macro write [on line 11, column 10 in myself.ftl]
     in user-directive write [on line 18, column 10 in myself.ftl]
    ----------
    
    Java backtrace for programmers:
    ----------
    freemarker.template.TemplateException: Error executing macro: write
    required parameter: nums is not specified.
    	at freemarker.core.Macro$Context.sanityCheck(Macro.java:211)
    	at freemarker.core.Macro$Context.runMacro(Macro.java:169)
    	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:217)
    	at com.you.test.freemarker.FreemarkerTest.testMyself(FreemarkerTest.java:204)
    	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>
         	 
    
    Error executing macro: write
    required parameter: nums is not specified.
    The problematic instruction:
    ----------
    ==> macro write [on line 11, column 10 in myself.ftl]
     in user-directive write [on line 18, column 10 in myself.ftl]
    ----------
    
    Java backtrace for programmers:
    ----------
    freemarker.template.TemplateException: Error executing macro: write
    required parameter: nums is not specified.
    	at freemarker.core.Macro$Context.sanityCheck(Macro.java:211)
    	at freemarker.core.Macro$Context.runMacro(Macro.java:169)
    	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:217)
    	at com.you.test.freemarker.FreemarkerTest.testMyself(FreemarkerTest.java:204)
    	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 executing macro: write
    required parameter: nums is not specified.
    The problematic instruction:
    ----------
    ==> macro write [on line 11, column 10 in myself.ftl]
     in user-directive write [on line 18, column 10 in myself.ftl]
    ----------
    
    Java backtrace for programmers:
    ----------
    freemarker.template.TemplateException: Error executing macro: write
    required parameter: nums is not specified.
    	at freemarker.core.Macro$Context.sanityCheck(Macro.java:211)
    	at freemarker.core.Macro$Context.runMacro(Macro.java:169)
    	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:217)
    	at com.you.test.freemarker.FreemarkerTest.testMyself(FreemarkerTest.java:204)
    	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、错误原因

    <#--freemarker自定义标签-->
         <#--对于write自定义标签有两个参数,nums是次数,name是名称-->
    	 <#macro write nums name>
    	     <#list 1..nums as num>
    	                   姓名:张三丰
    	                   性别:男
    	     </#list>
    	 </#macro>
    	 
    	 <@write/>
       由于write自定义标签有两个参数,在调用它的时候需要给两个参数指定值,否则报错


    3、解决办法

    <@write nums=4 name="你好!"/>
        给两个参数赋值


    <html>
      <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <title>freemarker自定义标签</title>
    
      </head>
      
      <body>
         <#--freemarker自定义标签-->
         <#--对于write自定义标签有两个参数,nums是次数,name是名称-->
    	 <#macro write nums name>
    	     <#list 1..nums as num>
    	                   姓名:张三丰
    	                   性别:男
    	     </#list>
    	 </#macro>
    	 
    	 <@write nums=4 name="你好!"/>
      </body>
    </html>
    

    运行结果:

    <html>
      <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <title>freemarker自定义标签</title>
    
      </head>
      
      <body>
         	 
    	                   姓名:张三丰
    	                   性别:男
    	                   姓名:张三丰
    	                   性别:男
    	                   姓名:张三丰
    	                   性别:男
    	                   姓名:张三丰
    	                   性别:男
      </body>
    </html>
    




  • 相关阅读:
    Binary Tree Zigzag Level Order Traversal
    Binary Tree Level Order Traversal
    Symmetric Tree
    Best Time to Buy and Sell Stock II
    Best Time to Buy and Sell Stock
    Triangle
    Populating Next Right Pointers in Each Node II
    Pascal's Triangle II
    Pascal's Triangle
    Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13315044.html
Copyright © 2011-2022 走看看