freemarker读取bean出错

herowzz 2008-08-01 10:56:44
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

<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>Welcome </h1>
id:${user.id}<br>
name:${user.name}<br>
age:${user.age}<br>
</body>
</html>




错误
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)


...全文
373 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
晓1984 2009-06-15
  • 打赏
  • 举报
回复
请设置为 cfg.setObjectWrapper(ObjectWrapper.BEANS_WRAPPER);
thomas.he 2008-10-22
  • 打赏
  • 举报
回复
freemarker.core.InvalidReferenceException: 我也是这样的问题
zhkchi 2008-08-01
  • 打赏
  • 举报
回复
class User {
改成public class User
herowzz 2008-08-01
  • 打赏
  • 举报
回复
up
herowzz 2008-08-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhkchi 的回复:]
class User {
改成public class User
[/Quote]

晕,果然是public的原因。。。
谢谢了。
天外流星 2008-08-01
  • 打赏
  • 举报
回复
Template + data model = output

参考:

/* Get or create a template */
Template temp = cfg.getTemplate("test.ftl");
/* Create a data model */
Map root = new HashMap();
root.put("user", "Big Joe");
Map latest = new HashMap();
root.put("latestProduct", latest);
latest.put("url", "products/greenmouse.html");
latest.put("name", "green mouse");
/* Merge data model with template */
Writer out = new OutputStreamWriter(System.out);
temp.process(root, out);
out.flush();
天外流星 2008-08-01
  • 打赏
  • 举报
回复
Writer out = new OutputStreamWriter(new FileOutputStream("D:/freemarker_project/out/helloword.html"),"GBK");

输出到文件试下..

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧