freemarker读取bean出错

Test.java

package org.test;

import java.util.*;
import java.io.*;
import freemarker.template.*;

public class Test {

public static void main(String[] args) throws Exception {
    Configuration cfg = new Configuration();
    cfg.setDirectoryForTemplateLoading(new File("E:/new"));
    cfg.setObjectWrapper(new DefaultObjectWrapper());
    Template temp = cfg.getTemplate("test.ftl");

    User user = new User();
    user.setId("1");
    user.setAge("88");
    user.setName("ttt");
    Map root = new HashMap();
    root.put("user", user);

    Writer out = new OutputStreamWriter(System.out);
    temp.process(root, out);
    out.flush();
    System.out.println("\nOK!");
}

}

class User {
private String id;
private String name;
private String age;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getAge() {
    return age;
}

public void setAge(String age) {
    this.age = age;
}

}

test.ftl



Welcome


Welcome


id:${user.id}

name:${user.name}

age:${user.age}


错误:

2008-8-1 10:50:44 freemarker.log.JDK14LoggerFactory$JDK14Logger error
严重:

Expression user.id is undefined on line 7, column 6 in test.ftl.

The problematic instruction:

==> ${user.id} [on line 7, column 4 in test.ftl]

Java backtrace for programmers:

freemarker.core.InvalidReferenceException: Expression user.id is undefined on line 7, column 6 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:208)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:208)
at freemarker.core.Environment.process(Environment.java:188)
at freemarker.template.Template.process(Template.java:237)
at org.test.Test.main(Test.java:23)
Exception in thread "main"
Expression user.id is undefined on line 7, column 6 in test.ftl.

The problematic instruction:

==> ${user.id} [on line 7, column 4 in test.ftl]

Java backtrace for programmers:

freemarker.core.InvalidReferenceException: Expression user.id is undefined on line 7, column 6 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:208)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:208)
at freemarker.core.Environment.process(Environment.java:188)
at freemarker.template.Template.process(Template.java:237)
at org.test.Test.main(Test.java:23)

:twisted: 我还特意copy代码下来跑了跑。。。

汗!!!基础知识复习:

class前面没任何修饰符,那它默认的是private

public 和 private 这两个修饰符是起访问限制的作用。

User user = new User();
user.setId("1");
user.setAge("88");
user.setName("ttt");
Map root = new HashMap();
root.put("user", user);

Writer out = new OutputStreamWriter(System.out);
temp.process(root, out);
out.flush();
System.out.println("\nOK!");
}

你确定你有把user对象传过去??

你试试User加一个构造函数,函数参数为所有的属性。
然后使用的时候:User user = new User(1,88,ttt);