急急急 关于freemarker的问题

jiangxi3781212 2009-07-31 09:40:04
实体类
package com.bean;

public class NewsItem {
private String title;
private String addTime;
private String showContent;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAddTime() {
return addTime;
}
public void setAddTime(String addTime) {
this.addTime = addTime;
}
public String getShowContent() {
return showContent;
}
public void setShowContent(String showContent) {
this.showContent = showContent;
}
public void loadData(){
this.title = "aaaaaaaaaaaaaaaa" ;
this.addTime="2009-12-12" ;
this.showContent="avvvvvvvvvvvvvvvvvv" ;
}
}
模板template.ftl
<table border=1>

<tr><td>${ni.title}</td><td>${ni.addTime}</td><td>${ni.showContent}</td></tr>

</table>

FreeMarkerTest1 类
package com.ftl;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import com.bean.NewsItem;

import freemarker.template.Configuration;
import freemarker.template.Template;

public class FreeMarkerTest1 {

/**
* @param args
*/
private NewsItem ni = null ;
public static void main(String[] args) {
// TODO Auto-generated method stub
FreeMarkerTest1 test = new FreeMarkerTest1() ;
test.sayHello("Hermit") ;
}
public void sayHello(String name){
Configuration freemarkerCfg = new Configuration() ;
freemarkerCfg.setClassForTemplateLoading(this.getClass(), "/") ;
freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8") ;
Template template ;
Locale.setDefault(Locale.ENGLISH) ;
try{
template = freemarkerCfg.getTemplate("template.ftl") ;
template.setEncoding("UTF-8") ;
ni = new NewsItem();
Map<String,Object> root = new HashMap<String,Object>() ;
// List list = new ArrayList() ;
ni.setAddTime("2009.12.12") ;
ni.setShowContent("aaaaaaaaaaaa") ;
ni.setTitle("bbbbbbbbbbbbbbbbb") ;
// list.add(ni) ;
root.put("ni", ni) ;
File htmlFile = new File("d:/test/t.html");
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(htmlFile), "UTF-8"));

// StringWriter writer = new StringWriter() ;
template.process(root, out) ;
out.flush();
System.out.println(out.toString());
}catch(Exception e){
e.printStackTrace() ;
}
}
public NewsItem getNi() {
return ni;
}
public void setNi(NewsItem ni) {
this.ni = ni;
}
}
运行后抛出的异常
Don't know how to present an object of this type to a template: com.bean.NewsItem
Quoting problematic instruction:
----------
==> ${ni.title} [on line 3, column 9 in template.ftl]
----------

Java backtrace for programmers:
----------
freemarker.template.TemplateModelException: Don't know how to present an object of this type to a template: com.bean.NewsItem
at freemarker.template.SimpleObjectWrapper.handleUnknownType(SimpleObjectWrapper.java:139)
at freemarker.template.SimpleObjectWrapper.wrap(SimpleObjectWrapper.java:116)
at freemarker.template.WrappingTemplateModel.wrap(WrappingTemplateModel.java:131)
at freemarker.template.SimpleHash.get(SimpleHash.java:186)
at freemarker.template.Environment.getGlobalVariable(Environment.java:693)
at freemarker.template.Environment.getVariable(Environment.java:679)
at freemarker.template.Identifier._getAsTemplateModel(Identifier.java:69)
at freemarker.template.Expression.getAsTemplateModel(Expression.java:88)
at freemarker.template.Dot._getAsTemplateModel(Dot.java:74)
at freemarker.template.Expression.getAsTemplateModel(Expression.java:88)
at freemarker.template.Expression.getStringValue(Expression.java:92)
at freemarker.template.DollarVariable.accept(DollarVariable.java:76)
at freemarker.template.Environment.visit(Environment.java:180)
at freemarker.template.MixedContent.accept(MixedContent.java:91)
at freemarker.template.Environment.visit(Environment.java:180)
at freemarker.template.Environment.process(Environment.java:166)
at freemarker.template.Template.process(Template.java:238)
at com.ftl.FreeMarkerTest1.sayHello(FreeMarkerTest1.java:52)
at com.ftl.FreeMarkerTest1.main(FreeMarkerTest1.java:28)
请问高手是什么问题呀,我原来传List的值都可以顺利输出,怎么传一个实体对象就不行了????????
...全文
213 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sangshusen_1988 2009-07-31
  • 打赏
  • 举报
回复
你看看直接${ni}可以输出不?然后再加上属性看看
jiangxi3781212 2009-07-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qgz0910 的回复:]
template.process(Object,out) 和map没有关系的
[/Quote]

我试了没用的,出现这个错误

Don't know how to present an object of this type to a template: com.bean.NewsItem
Quoting problematic instruction:

Java backtrace for programmers:
----------
freemarker.template.TemplateModelException: Don't know how to present an object of this type to a template: com.bean.NewsItem
at freemarker.template.SimpleObjectWrapper.handleUnknownType(SimpleObjectWrapper.java:139)
at freemarker.template.SimpleObjectWrapper.wrap(SimpleObjectWrapper.java:116)
at freemarker.template.Template.createProcessingEnvironment(Template.java:326)
at freemarker.template.Template.process(Template.java:238)
at com.ftl.FreeMarkerTest1.sayHello(FreeMarkerTest1.java:52)
at com.ftl.FreeMarkerTest1.main(FreeMarkerTest1.java:28)
qgz0910 2009-07-31
  • 打赏
  • 举报
回复
template.process(Object,out) 和map没有关系的
jiangxi3781212 2009-07-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qgz0910 的回复:]
template.process(root, out) ; 改成 template.process(ni, out) ; 看看
[/Quote]

这样更不行,那就跳过了Map存储了。
qgz0910 2009-07-31
  • 打赏
  • 举报
回复
你在跟踪调试下 看ni 或者 root中有值不
qgz0910 2009-07-31
  • 打赏
  • 举报
回复
template.process(root, out) ; 改成 template.process(ni, out) ; 看看
jiangxi3781212 2009-07-31
  • 打赏
  • 举报
回复
没用

Expression title is undefined on line 3, column 11 in template.ftl.
Quoting problematic instruction:
----------
==> ${title} [on line 3, column 9 in template.ftl]
----------

Java backtrace for programmers:
----------
freemarker.template.InvalidReferenceException: Expression title is undefined on line 3, column 11 in template.ftl.
at freemarker.template.TemplateObject.assertNonNull(TemplateObject.java:125)
at freemarker.template.Expression.getStringValue(Expression.java:117)
at freemarker.template.Expression.getStringValue(Expression.java:92)
at freemarker.template.DollarVariable.accept(DollarVariable.java:76)
at freemarker.template.Environment.visit(Environment.java:180)
at freemarker.template.MixedContent.accept(MixedContent.java:91)
at freemarker.template.Environment.visit(Environment.java:180)
at freemarker.template.Environment.process(Environment.java:166)
at freemarker.template.Template.process(Template.java:238)
at com.ftl.FreeMarkerTest1.sayHello(FreeMarkerTest1.java:52)
at com.ftl.FreeMarkerTest1.main(FreeMarkerTest1.java:28)
gaobaiy 2009-07-31
  • 打赏
  • 举报
回复
Don't know how to present an object of this type to a template: com.bean.NewsItem

无法引述此类对象到模版
qgz0910 2009-07-31
  • 打赏
  • 举报
回复
仔细看了下代码:
ni现在是NewsItem 直接把 ${ni.title} 改成${title}
qgz0910 2009-07-31
  • 打赏
  • 举报
回复
ni里面是NewsItem 那是不是直接把这个 ${ni.title} 改成${title}
jiangxi3781212 2009-07-31
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sangshusen_1988 的回复:]
你看看直接${ni}可以输出不?然后再加上属性看看
[/Quote]
没有用

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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