iteye_7290 2011-08-18 10:55
浏览 293
已采纳

Freemarker错误

 

public class HelloFreeMarker {

    private Configuration cfg ;
    
    
    public void init() throws Exception {
        
        cfg = new Configuration();
        cfg.setDirectoryForTemplateLoading(new File("src\\com\\s2freemarker\\exer\\templates"));
    }
    
    public void process() throws Exception{
        
        Map<Object,Object> root = new HashMap<Object,Object>();
        root.put("name", "FreeMarker");
        root.put("msg", "First example for freemarker .");
        
        Template t = cfg.getTemplate("test.ftl");
        t.process(t, new OutputStreamWriter(System.out));
        
    }
    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
        HelloFreeMarker hfm = new HelloFreeMarker();
        hfm.init();
        hfm.process();
    }

}

模版文件:

 

${name},hello!${msg}
 

错误提示:

 

Aug 18, 2011 10:49:25 AM freemarker.log.JDK14LoggerFactory$JDK14Logger error
SEVERE: Expression msg is undefined on line 1, column 17 in test.ftl.

Expression msg is undefined on line 1, column 17 in test.ftl.
The problematic instruction:
----------
==> ${msg} [on line 1, column 15 in test.ftl]
----------

Java backtrace for programmers:
----------
freemarker.core.InvalidReferenceException: Expression msg is undefined on line 1, column 17 in test.ftl.
    at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124)
    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:210)
    at freemarker.core.MixedContent.accept(MixedContent.java:92)
    at freemarker.core.Environment.visit(Environment.java:210)
    at freemarker.core.Environment.process(Environment.java:190)
    at freemarker.template.Template.process(Template.java:237)
    at com.s2freemarker.exer.test.HelloFreeMarker.process(HelloFreeMarker.java:30)
    at com.s2freemarker.exer.test.HelloFreeMarker.main(HelloFreeMarker.java:39)
test.ftl,hello!
Expression msg is undefined on line 1, column 17 in test.ftl.
The problematic instruction:
----------
==> ${msg} [on line 1, column 15 in test.ftl]
----------

Java backtrace for programmers:
----------
freemarker.core.InvalidReferenceException: Expression msg is undefined on line 1, column 17 in test.ftl.
    at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124)
    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:210)
    at freemarker.core.MixedContent.accept(MixedContent.java:92)
    at freemarker.core.Environment.visit(Environment.java:210)
    at freemarker.core.Environment.process(Environment.java:190)
    at freemarker.template.Template.process(Template.java:237)
    at com.s2freemarker.exer.test.HelloFreeMarker.process(HelloFreeMarker.java:30)
    at com.s2freemarker.exer.test.HelloFreeMarker.main(HelloFreeMarker.java:39)
Exception in thread "main" 
Expression msg is undefined on line 1, column 17 in test.ftl.
The problematic instruction:
----------
==> ${msg} [on line 1, column 15 in test.ftl]
----------

Java backtrace for programmers:
----------
freemarker.core.InvalidReferenceException: Expression msg is undefined on line 1, column 17 in test.ftl.
    at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124)
    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:210)
    at freemarker.core.MixedContent.accept(MixedContent.java:92)
    at freemarker.core.Environment.visit(Environment.java:210)
    at freemarker.core.Environment.process(Environment.java:190)
    at freemarker.template.Template.process(Template.java:237)
    at com.s2freemarker.exer.test.HelloFreeMarker.process(HelloFreeMarker.java:30)
    at com.s2freemarker.exer.test.HelloFreeMarker.main(HelloFreeMarker.java:39)
  • 写回答

1条回答 默认 最新

  • myali88 2011-08-18 11:11
    关注

    [code="java"]
    t.process(t, new OutputStreamWriter(System.out));

    [/code]
    你这里搞错了,没有把参数传进去,改成这样:
    [code="java"]
    t.process(root, new OutputStreamWriter(System.out));

    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题