首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

关于freemarker自定义标签作为模板在struts中生成静态html的有关问题

2013-02-25 
关于freemarker自定义标签作为模板在struts中生成静态html的问题这个问题其实之前也已经有人问过了类似的:

关于freemarker自定义标签作为模板在struts中生成静态html的问题

这个问题其实之前也已经有人问过了类似的:http://bbs.csdn.net/topics/320155882
,但是我还是找不到满意的答案。
详细描述如下:

自定义标签 [@vcms_entity][/@vcms_entity],这个标签只有三个参数,entity,package,id,传入这三个参数后可到数据库取出相应的对象


// + className + """);}
// }

// 保存结果集
env.setVariable(RESULT, ObjectWrapper.DEFAULT_WRAPPER.wrap(obj));
if (body != null) {
body.render(env.getOut());
}
}

@Autowired
public void setBasicService(BasicService basicService) {
this.basicService = basicService;
}

}



如上定义,我可以在
a.ftl中使用<@vcms_entity entity="Channel" package="com.vcms.cms.entity" id="1"></@vcms_entity>
这样的方式取得数据,使用方法是访问相应的struts action,然后返回类型<result name="success" type="freemarker">a.ftl</result>

但是,目前我希望采用生成html的方式处理,即:
读入a.ftl模板,生成successPath="a.html"(或者其他名字),然后<result name="html">${successPath}</result>
问题就出现了:

在StaticFreemarker.java中读入的a.ftl,没法执行其中的自定义标签,导致读入模板报错。(执行到[color=#800000]template.process(map, out);这句的时候报错
)[/color]

StaticFreemarker.java


@Component
public class StaticFreemarker {

/**
 * 初始化模板引擎
 * 
 * @param ftl
 *            模板名称
 * @param htmlName
 *            需要生成html页面的名称
 * @param map
 *            模板中需要的参数集合
 * @param relativePath
 *            模板相对于根路径的相对路径, 例如:/WebRoot/module/test.ftl,则这里传入的参数是module
 * @throws IOException
 * @throws TemplateException
 */
@SuppressWarnings("rawtypes")
public void init(String ftl, String htmlName, Map map, String relativePath)
throws IOException, TemplateException {

// 获取模板
Configuration cfg = new Configuration();
cfg.setServletContextForTemplateLoading(
ServletActionContext.getServletContext(), "/" + relativePath);
cfg.setEncoding(Locale.getDefault(), "utf-8");
Template template = cfg.getTemplate(ftl);
// 设置模板编码
template.setEncoding("utf-8");

String path = ServletActionContext.getServletContext().getRealPath("/");
File htmlFile = new File(path + htmlName);
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(htmlFile), "utf-8"));
template.process(map, out);
out.flush();
out.close();
}

}




报的错误是:
freemarker.core.InvalidReferenceException: Expression user is undefined on line 6, column 19 in a.ftl.


附上a.ftl


[@vcms_list entity="User" package="com.vcms.cms.entity" size=20 page=2 snames="birthday,registerTime"
          svalues="2013-02-11,2013-02-13 23:08:32"]
[#list resultset.list as user]
<hr>
${user.userId}
<br>
${user.userName}
<br>
${user.registerTime}
<br>
${user.birthday}
<br>
[/#list]
[/@vcms_list]





请各位大神指教。


以上说了一通,我总结一下:
我希望使用struts+freemarker及自定义freemarker标签生成html,在读入自定义标签模板的时候,报错。断点自定义标签的directive,并没有进入。

freemarker struts html 自定义标签
[解决办法]
Expression obj is undefined on line 5, column 11 in a.ftl.第五行是什么?
报错意思表达式为定义。看看是否字母啥的,写错没有

热点排行
Bad Request.