① 请问各位,FreeMarker怎么用专门用来读取XML数据吗
1. freemarker是一个模版引擎;所谓模版引擎,他就是一个模版,数据你必须提前给它设置好,它才能显示;
2. <name>${name}</name>使用的是El表达式
3. 综上所述,你必须通过后台,解析xml才能在ftl页面使用数据;如果你是标准的xml文件,freemarker提供了一个工具,直接调用就可以解析,不用你自己处理
② 如何在jsP页面中使用FreeMarker标签和Struts2标签
在jsp页面中使用FreeMarker标签和struts2标签,需要在html,引入相应的标签,如下步骤:
1.在web.xml文件中启动JspSupportServlet:
在web.xml文件中作如下配置
Xml代码
<servlet>
<servlet-name>JspSupportServlet</servlet-name>
<servlet-class>
org.apache.struts2.views.JspSupportServlet
</servlet-class>
<!--配置JspSupportServlet自启动-->
<load-on-startup>1</load-on-startup>
</servlet>
2.在FreeMarker模板文件中使用“assign指令”导入标签库
java代码
<#assigns=JspTaglibs["/WEB-INF/struts-tags.tld"]/>
3.编写登录页面FTL文件:
Html代码
<#assigns=JspTaglibs["/WEB-INF/struts-tags.tld"]/>
<html>
<head>
<title>登录页面</title>
</head>
<body>
登陆<br>
<@s.formaction="Login.action">
<@s.textfieldname="username"label="用户名"/>
<@s.textfieldname="password"label="密码"/>
<@s.submitvalue="提交"/>
</@s.form>
提示:${name1}=${name2}
</body>
</html>
注意:
name1和name2属性,是后面从Action里面获取的属性,这里是为了验证在模版中获取属性值
WEB容器默认不会处理 FreeMarker模板页面,如果直接通过浏览器直接请求该页面,否则看到的不是我们想要的结果,而是该模板页面的源代码
③ 如何使用Freemarker生成java代码
Freemarker是一个模板框架。我们可以通过Freemarker进行代码生成或页面的静态生成。 现在简单的说一下怎样使用Freemarker Freemarker的主要生成类
public boolean generate(String templateFileName, Map data,
String fileName) {
try {
//取得模板的位置
String templateFileDir=templateFileName.substring(0, templateFileName.lastIndexOf("/"));
//取得模板的名字
String templateFile=templateFileName.substring(templateFileName.lastIndexOf("/"), templateFileName.length());
//取得生成文件的路径
String genFileDir=fileName.substring(0, fileName.lastIndexOf("/"));
Template template = ConfigurationHelper.getConfiguration(templateFileDir).getTemplate(templateFile);
File fileDir=new File(genFileDir);
org.apache.commons.io.FileUtils.forceMkdir(fileDir);
File output = new File(fileName);
if(output.exists()){
//如何代码已存在不重复生成
return false;
}
Writer writer = new FileWriter(output);
template.process(data, writer);
writer.close();
} catch (TemplateException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
代码中的Map 是模板所需要的数据,我们可以通过面向对像的方法把数据存在模板中public boolean genDaoInterface(String fileName){
DaoModel Model=new DaoModel();
//设置Dao实现类的包名
Model.setPackageName(DaoConstant.PACKAGE);
//取得接口名
String className=StringUtils.substringBefore(fileName,".");
//设置接口名
Model.setClassName(className);
Map<String, Object> data = new HashMap<String, Object>();
data.put("model", Model);
//设置生成的位置
String filePath=new String("src/"+package2path(DaoConstant.PACKAGE)+"/"+fileName);
//代码生成
return super.generate(DaoConstant.INTERFACE_TEMPLATE, data, filePath);
}
data.put("model", Model);由这句代码可看出我们将可以在模板中直接调用这些数据package ${model.packageName};
public interface ${model.className} extends BaseHibernateDao {
}
④ 什么是 FreeMarker
A、首先freemarker是模板,当你打开页面的时候freemarker可也说是加载最快的。jsp则需要转换为servlet所以第一次回要慢一些。答B、struts2的所有标签都是用freemarker写的,这也就是说你在freemarker中就可以直接引用struts2的任何标签,相当的方便。jsp不行吧。struts也不行。只有struts2。C、如果使用了freemarker他与json一起使用会方便的很多