① 請問各位,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一起使用會方便的很多