當前位置:首頁 » 網頁前端 » freemarkerweb例子
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

freemarkerweb例子

發布時間: 2022-11-21 22:31:24

A. Freemarker中<#if (A) && A == 0>判斷怎麼解釋

這句話意思是:

A?? 判斷A是不是存在,A==0 判斷 A是否等於0。

B. 請教FreeMarker在java web開發中使用方法

sysUserList 從action傳過來
<#list sysUserList as item>
${item.name}
<#if item.sex=='MAN'>男</#if>
<#if item.sex=='WOMAN'>女</#if>
</#list>

C. 什麼是FreeMarker

它是一個Java package,面向Java程序員的class library。它本身並不是針對最終用戶的應用,而是允許程序員將其嵌入到他們的產品中。 FreeMarker被設計用來生成HTML Web頁面,特別是基於MVC(Model View Controller)模式的應用程序。使用 MVC 模式作為動態的WEB頁面的想法,是為了分隔頁面設計者 (HTML 設計者) 和程序員。.每個人做自己擅長的那一部分。設計者可以不通過程序員的改變或修改代碼來改變網頁的樣子,因為應用邏輯(Java程序)和頁面設計(FreeMarker 模版)是分開的。模板不會被復雜繁瑣的程序框架所 破壞。即使當一個項目的程序員和 HIMTL頁面的製作者是同一個人時,這種分隔也是很有用,因為這樣有助於保持應用的清晰並易於維護。 盡管FreeMarker有一些編程的能力,但它並不是一個象PHP那樣的成熟的編程語言。與Java不同的是,Java程序准備用來顯示的數據(如 sql queries) ,而Freemarker僅是生成文本頁,這個文本頁顯示用於模板的預備數據。 FreeMarker不是一個Web應用框架,而更適合充當Web應用框架里的一個組件的角色,但FreeMarker引擎本身對HTTP或servlets並不關心,它僅僅是生成文本。在非Web應用環境中它同樣能夠展示完美的用途。然而值得注意的是:我們為使用FreeMarker提供了方便的解決方案,作為Model2框架(如Struts)的視圖組件,你也可以在模版中使用JSP標簽。 FreeMarker是免費的,有 BSD-style license Servlet運行於Java-enabled Web Server中。 Java Servlet 可以動態地擴展Server的能力,並採用請求-響應模式提供Web服務。 最早支持Servlet技術的是JavaSoft的Java Web Server 。此後,一些其它的基於Java的Web Server開始支持標準的

D. spring mvc freemarker 只能用request來傳遞數據嗎

先附上一個SiteMesh3+FreeMarker+SpringMVC例子http://files.cnblogs.com/adaikiss/sitemesh3_freemarker_springmvc.zip

下載後解壓,本地環境變數要有MAVEN,CMD進入工程目錄直接運行mvn jetty:run

昨天花了一天時間來跟蹤調試springmvc, freemarker, sitemesh3, 終於弄明白了大概的原理,最後解決了sitemesh中文(UTF-8)亂碼,ftl裝飾頁不被渲染的問題。

sitemesh3是通過一個filter來對response進行攔截處理,在response提交之前,它會把response流里的數據備份起來,清空流,然後用request.getRequestDispatcher(裝飾頁URI).forward()來取得渲染後的裝飾頁,然後再把裝飾頁里的標簽替換成之前備份的對應內容。

也就是說sitemesh不關心你的頁面是如何生成的,它只是將兩者拼接起來,不管你用的是JSP,Volocity, FreeMarker 還是 SpringMVC, Struts, wicket。

這樣一來你就可以靈活地控制頁面的生成方式。你可以把sitemesh3當成一個中間瀏覽器,他使用用戶瀏覽器發送過來的request對象發送了兩次(或以上)請求,第一次是原來的請求, 第二次是對裝飾頁面的請求,然後把這兩個請求結果拼接起來返回給用戶瀏覽器。

看到這里,裝飾頁如果是FTL就不被渲染的問題也就有了解決方法了。只要自己寫一個過濾器對.ftl的請求用freemarker渲染一遍就可以了。由於我使用的是springmvc + freemarker,因此我直接拿springmvc來渲染FTL文件了,這樣可以像被裝飾頁一樣方便地使用spring的宏和其他一些對象。下面是我的filter

復制代碼
public class FreemarkerFilter implements Filter {

private Locale locale;

@Override
public void init(FilterConfig filterConfig) throws ServletException {
String localeStr = filterConfig.getInitParameter("locale");
if(StringUtils.isNotBlank(localeStr)){
locale = new Locale(localeStr);
}else {
locale = Locale.getDefault();
}
}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
String name = req.getRequestURI();
name = name.substring(1, name.lastIndexOf(".ftl"));
FreeMarkerViewResolver viewResolver = SpringContextHolder.getBean(FreeMarkerViewResolver.class);
View view = viewResolver.resolveViewName(name, locale);
@SuppressWarnings("unchecked")
Map<String, Object> model = (Map<String, Object>) request.getAttribute(ViewRendererServlet.MODEL_ATTRIBUTE);
view.render(null, req, res);
} catch (Exception e) {
throw new ServletException(e);
}
}

@Override
public void destroy() {
// TODO Auto-generated method stub

}

}
復制代碼
在這里,我是把SpringMVC對被裝飾頁處理時生成的model傳到了裝飾頁。裝飾頁和原來被include進來的頁面差不多,一般裝飾頁可能不需要使用被裝飾頁中的model, 可以把SuppressWarnings註解下面那行注釋掉,下面傳null過去。

在web.xml里加上過濾器配置:

復制代碼
<filter>
<filter-name>freemarkerFilter</filter-name>
<filter-class>org.adaikiss.kay.web.FreemarkerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>freemarkerFilter</filter-name>
<url-pattern>*.ftl</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
復制代碼

這樣一來由sitemesh forward的請求就能被攔截並渲染。當然,你也可以把裝飾頁的後綴改成.des,url-pattern要同步改。

關於中文亂碼的問題,在跟蹤代碼的時候發現對於沒有contentType的view,SpringMVC會使用默認的contentType:AbstractTemplateView.DEFAULT_CONTENT_TYPE,即

"text/html;charset=ISO-8859-1",view 中可以設置這個屬性,不過我的配置里沒有定義view,還好ViewResolver里也可以設置,在springmvc配置文件里加上contentType屬性即可。

<bean id="viewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="contentType" value="text/html; charset=UTF-8"/>

...

</bean>

E. 請教FreeMarker在java web開發中使用方法

在 Web應用中使用FreeMarker
在Web應用中使用FreeMarker跟在Java程序中使用並沒有太大的區別. 下面是是一個在Web中使用的例子,用來生成HTML頁面的模板文件內容如下:
<html>
<head>
<title>FreeMarker 的HelloWorld</title>
</head>
<body>
${message}
</body>
</html>
我們在Web應用中使用FreeMarker時,應該讓Servlet來合並模板和數據,因此,Servlet負責創建Configuration實例,並負責合並模板和數據,下面是Servlet源代碼:
package lee;
import java.util.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import freemarker.template.*;
public class HelloServlet extends HttpServlet
{
private Configuration cfg;
public void init()
{
//初始化FreeMarker配置
//創建一個Configuration實例
cfg = new Configuration();
//設置 FreeMarker的模版文件位置
cfg.(getServletContext(), "WEB-INF/templates");
}

public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
//建立數據模型
Map root = new HashMap();
root.put("message", "Hello FreeMarker!");
//取得模版文件
Template t = cfg.getTemplate("test.ftl");
// 開始准備生成輸出
// - 使用模版文件的charset作為本頁面的charset
// - 使用text/html MIME-type
response.setContentType("text/html; charset=" + t.getEncoding());
Writer out = response.getWriter();

//合並數據模型和模版,並將結果輸出到out中
try
{
t.process(root, out);
}
catch (TemplateException e)
{
throw new ServletException("處理Template模版中出現錯誤", e);
}
}
}
可以看到這個Servlet類的代碼與普通的Java程序中使用FreeMarker大致一樣,區別有兩個:1,設置FreeMarker載入模板的方法不一樣,在Servlet中設置載入的方法是,第一個參數是本web應用的 ServletContext,第二個參數是模板文件的路徑.;2,結果必須輸出到HttpServletResponse中,才能被瀏覽器載入.
配置Servlet的web.xml文件中的代碼如下:
<web-app>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>lee.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>

F. javaweb 使用freemarker導出Excle,打開之後提示,格式與擴展名不符,點擊「是」,依然可以打開

當然可以打開,擴展名只是用來提示系統選擇什麼軟體打開文件並不會影響文件內容。要解決這個問題只要把下載的文件後綴名和模板後綴設置一致就行了

G. freemarker 加上數據後 其中的struts2標簽中的 onchange等事件為什麼就不顯示了呢

該文件實質是一個控制器和視圖的黏合劑,控制器之所以能夠選擇對應的視圖,以及視圖能夠通過對應的控制器查詢到模型中的數據都是依賴該文件.該文件是一個XML文件.在該配置文件中每Action都對應一個Action標簽用來映射Action類的信息.
從軟體的需求分析與設計談起
實現一個完整的基於Struts的WEB應用
總結:
Java的Web應用中使用到的技術非常多,也相對比較復雜.因此開發中開發人員所負責的技術方面也會相對較多,所以我們必須考慮到個人的特長對開發工作進行合理分配,這就需要我們在軟體的設計階段考慮清楚.而MVC這種設計模式能夠很好的把業務數據模型和業務處理模型獨立出來,這樣開發出獨立的系統組件,以便於在開發視圖階段能夠很好的保持數據的一致性.而在處理視圖和模型之間的關系時控制器成為了兩者的紐帶,這樣使得軟體項目可以成為一個系統化的工程.
而Struts框架在Java的Web應用中就起到了這個作用.這樣使得開發階段能夠很好的利用該框架完成開發項目,我們可以選擇合適的模型組件如我們可以使用JavaBean技術來完成業務模型和數據模型的介面,而資料庫則可以充當數據模型來保持業務階段的持久狀態.JSP和Struts為我們提供的一組標簽這可以完成頁面的表示和頁面的邏輯等功能使得我們有了豐富的視圖功能.並且Struts提供了ActionForm為視圖可以和事件進行數據交換介面提供了良好的通道使得在處理Action事件時候可以通過ActionForm從視圖中取得數據.而兩者之間的橋梁就是Struts-config.xml文件該XML文件可以配置兩者之間的聯系.這使得介面之間有著極高的靈活性和伸縮性.而在Action中我們有可以調用和包含模型組件的功能.這樣使得開發非常具有效率和可擴展能力.
Struts框架事實上已經被很多軟體項目所應用,所以足見其適用性時非常可靠的.這里也希望通過該問的介紹能夠使得讀者對Struts框架有一個足夠的了解.
參考資料:
精通Struts基於MVC的Java Web 設計與開發

H. 請教FreeMarker在java web開發中使用方法

很簡單,引入jar包

然後在看你集成什麼框架了,就需要配置什麼文件,不難,網路上有各種配製方法。

I. webwork + freemarker做的網頁,老是有緩存怎麼辦

關於Freemarket+webwork的編碼問題『提問』webwork+freemarker亂碼的問題Webork2和FreeMarker中文亂編問題,求解!推薦群組:GT-Grid相關推薦Struts軟體環境:tomcat4.0、webwork-2.1.6、freemarker-2.3、hibernate-2.1.7、spring-1.1.2、SQLserver2000配置文件:webwork.properties###.locale=zh_CNwebwork.i18n.encoding=GB2312*.ftl文件也沒有加<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">之類的代碼錯誤提示信息:訪問資料庫沒有問題,但資料庫數據返回到freemarker的*.ftl頁面就變成了「?」等亂碼你的分析:剛接觸webwork不久,測試的例子就是robbin的那個「SimpleDemo」的例子,只是數據源該成了sqlserver2000;最初是*.ftl的上的中文漢字都是亂碼,後來論壇搜了搜,解決了,但資料庫的數據依舊顯示不正確;無奈只有在程序裡面進行iso8859-1轉gb2312碼後頁面才都顯示正常;推薦鏈接Java開發新方式:專注UI,快速開發!

J. 如何在FreeMarker訪問數據模型中對象屬性

步驟如下:
①創建Configuration實例,該實例負責管理FreeMarker的模板載入路徑,負責生成模板實例。
②使用Configuration實例來生成Template實例,同時需要指定使用的模板文件。
③填充數據模型,數據模型就是一個Map對象。
④調用Template實例的process方法完成合並。

根據上面步驟,下面提供一個使用FreeMarker創建輸出的Java程序,該程序代碼如下:
public class HelloFreeMarker
{
//負責管理FreeMarker模板文件的Configuration實例
private Configuration cfg;
//負責初始化Configuration實例的方法
public void init() throws Exception
{
//初始化FreeMarker配置
//創建一個Configuration實例
cfg = new Configuration();
//設置FreeMarker的模板文件位置
cfg.(new File("templates"));
}
//處理合並的方法
public void process() throws Exception
{
//創建數據模型
Map root = new HashMap();
root.put("name", "FreeMarker!");
root.put("msg", "您已經完成了第一個FreeMarker的實例!");
//使用Configuration實例來載入指定模板
Template t = cfg.getTemplate("test.flt");
//處理合並
t.process(root, new OutputStreamWriter(System.out));
}
public static void main(String[] args) throws Exception
{
HelloFreeMarker hf = new HelloFreeMarker();
hf.init();
hf.process();
}
}
上面代碼創建了一個Map實例root,這個root將作為模板文件的數據模型,在該數據模型中存儲了兩個
key-value對,其中第一個是name,第二個是msg,這兩個key都有對應的value,這兩個value將會填充到模板中對應的插值處。
雖然FreeMarker可以在Java中使用,但大部分時候FreeMarker都用於生成HTML頁面。

下面介紹在Web應用中使用FreeMarker,用Servlet來合並模板和數據模型,下面是Servlet應用中的代碼:
public class HelloServlet extends HttpServlet
{
//負責管理FreeMarker模板文件的Configuration實例
private Configuration cfg;
//負責初始化Configuration實例的方法
public void init() throws Exception
{
//初始化FreeMarker配置
//創建一個Configuration實例
cfg = new Configuration();
//設置FreeMarker的模板文件位置
cfg.(getServletContext(), "WEB-INF/templates");
}
//生成用戶響應
public void service(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException
{
//創建數據模型
Map root = new HashMap();
root.put("message", "Hello FreeMarker!");
//使用Configuration實例來載入指定模板,即:取得模板文件
Template t = cfg.getTemplate("test.flt");
//開始准備生成輸出
//使用模板文件的charset作為本頁面的charset
//使用text/html,MIME-type
response.setContentType("text/html; charset=" + t.getEncoding());
Writer out = response.getWriter();
//合並數據模型和模板,並將結果輸出到out中
try
{
t.process(root, out);
}
catch(TemplateException e)
{
throw new ServletException("處理Template模板中出現的錯誤", e);
}
}
}