Freemarker自定義標籤的簡單分析
一、 用macro實現自定義指令,例如:
自定義指令可以使用macro指令來定義。 <#macro greet person> <font size="+2">Hello ${person}!</font> </#macro> macro指令自身不列印任何內容,它只是用來建立巨集變數,所以就會有一個名為greet的變數。 使用這個巨集: <@greet person="Fred"/> 會打印出: <font size="+2">Hello Fred!</font>
二、用java程式碼標籤實現自定義指令:
可以使用TemplateDirectiveModel介面在Java程式碼中實現自定義指令。
簡單示例如下:
1、實現TemplateDirectiveModel介面。 public class UpperDirective implements TemplateDirectiveModel { public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException { if (!params.isEmpty()) { throw new TemplateModelException( "parameters 此處沒有值!"); } if (loopVars.length != 0) { throw new TemplateModelException( " variables 此處沒有值!"); } if (body != null) { //執行nested body 與FTL中 <#nested> 類似。 body.render(new UpperCaseFilterWriter(env.getOut())); } else { throw new RuntimeException("missing body"); } } private static class UpperCaseFilterWriter extends Writer { private final Writer out; UpperCaseFilterWriter (Writer out) { this.out = out; } public void write(char[] cbuf, int off, int len) throws IOException { char[] transformedCbuf = new char[len]; for (int i = 0; i < len; i++) { transformedCbuf[i] = Character.toUpperCase(cbuf[i + off]); } out.write(transformedCbuf); } public void flush() throws IOException { out.flush(); } public void close() throws IOException { out.close(); } } } 說明:<#nested>指令執行位於開始和結束標記指令之間的模板程式碼段。
2、注入FreeMarkerConfigurer的freemarkerVariables中。 例如:在jeecms-servlet-front.xml <entry key="upper" value-ref="upper"/> <bean id="upper" class="com.example.UpperDirective" /> 說明: FreeMarkerConfigurer. 、setFreemarkerVariables(Map<String,Object> variables) 底層呼叫了FreeMarker的Configuration.setAllSharedVariables()方法。 因為更好的實踐是將常用的指令作為共享變數放到Configuration中。
3、呼叫自定義指令: [@upper] bar [#list ["red", "green", "blue"] as color] ${color} [/#list] baaz [/@upper]
4、顯示輸出結果: BAR RED GREEN BLUE BAAZ
相關推薦
Freemarker自定義標籤的簡單分析
一、 用macro實現自定義指令,例如: 自定義指令可以使用macro指令來定義。 <#macro greet person> <font size="+2">Hello ${person}!</font>
freemarker自定義標籤報錯(四)
freemarker自定義標籤 1、錯誤描述 六月 05, 2014 11:31:35 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 嚴重: Template processing error: "Err
freemarker自定義標籤報錯(五)
freemarker自定義標籤 1、錯誤描述 六月 05, 2014 11:40:49 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 嚴重: Template processing error: "Expr
spring中freemarker自定義標籤詳解
最近因工作需要,從網上搜了一個jeecms網站,準備進行借鑑使用,發現裡面對模板用的不錯,前面雖說也對freemarker有用,但是還沒有這麼深入,所以就查了一些資料,下面進行總結下。 一、jar包準備 首先是Spring、SpringMVC的依賴jar包…… 然後是Fr
Struts2與freemarker自定義標籤
包目錄檢視 領域模型層User.java package com.xuzengqiang.project.domain; public class User { private String
Java Web學習筆記(一)FreeMarker自定義標籤實現生成前端指令碼驗證
最近在學習Java Web因為.net已經寫的想吐了。通過網易雲課堂瞭解了當前常用的SSM框架的使用方法,前期一切都很順利,包括資料庫的訪問、事務提交、物件注入、面向切片等等,但是當我對頁面檢視進行實現時發現相對於.net有一點不方便。Java Web的檢視層的實現方式非常
Freemarker自定義標籤+spring國際化所碰到的坑
最近在弄springmvc國際化,碰到一個問題,昨天下午兩三個小時加上今天上午,最後終於在大佬同事的提示下知道了原因所在。 首先注意spring.ftl的這句話 這是freemarker的巨集變數,由此可以看出springMacroRequestContext是一個物件
freemarker自定義標籤報錯(六)
freemarker自定義標籤 1、錯誤描述 freemarker.core.ParseException: Encountered "\"\u4f60\u597d\uff01\"" at line 18, column 25 in myself.ftl. Was ex
Spring遇見問題(三)-----FreeMarker自定義標籤
web.xml檔案 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http:
freemarker自定義標籤(二)
freemarker自定義標籤 1、自定義標籤 通過自定義標籤,寫一個重複指定字串 2、實現原始碼 <html> <head> <meta
UWP 使用新版畫中畫 FontIcon —— 如何使用自定義字型 —— 簡單分析Windows Calculator原始碼
微軟在新版UWP計算器中加入了一個“置頂”功能,它相當於我們之前看視訊的“畫中畫”一樣。 點選後窗體置頂,同時可以進行其他任務。 有的小夥伴說,不就是一個圖示嗎,去 Segoe MDL2 圖示 把圖示找
freemarker 自定義freeMarker標籤
Java程式碼 import java.io.IOException; import java.io.Writer; import java.util.Iterator; import java.util.List; import java.util.Map; import
struts2專案中用freemarker自定義模板,s:component標籤來引用
1 在WEB-INF下建立template/simple資料夾,在裡面新建模板檔案prop1.ftl模板檔案內容為<div> <span>${parameters.p_title?html}:</span> <#if paramet
Javaweb----簡單自定義標籤的編寫
使用標籤一定要注意加上jar包,為jstl.jar 和standard.jar就是了 在WEB-INF下建立一個myTag.tld 用xml檔案格式建立 myTag.tld HelloSimple
freemarker編寫自定義標籤
freemarker提供了TemplateDirectiveModel介面,我們可以利用它來實現自定義標籤的編寫。 例子來源於freemarker中文參考手冊 如有:repeatDirective.rj <#assign x = 1> <@repeat
IIS ajax CORS 訪問發送自定義Header時分析
nbsp post true cal 後臺 config -a coo function 場景: a站:http://127.0.0.1/a b站:http://localhost/b (IIS7.5) a站用ajax訪問b的資源,代碼如下: $.ajaxSetu
Android零基礎入門第24節:自定義View簡單使用
子類 protect jin 討論 我們 @+ amp 進階 運行程序 當我們開發中遇到Android原生的組件無法滿足需求時,這時候就應該自定義View來滿足這些特殊的組件需求。 一、概述 很多初入Android開發的程序員,對於Android自定義View可能比較
自定義標籤庫,匯入異常,報500錯誤
HTTP Status 500 - The absolute uri: http://java.zcb.common cannot be resolved in either web.xml or the jar files deployed with this application
springboot 自定義一個簡單的 starter
1.新建專案 。 啟動器只用來做依賴匯入; 專門來寫一個自動配置模組; idea 下建立空專案 hello-spring-boot-starter 新增兩個子模組 spring-boot-starter-autoconfigurer, spring-boot-starter-hell
spring 自定義標籤的實現
在我們進行Spring 框架開發中,估計用到最多的就是bean 標籤吧,其實在Spring中像<mvc/><context/>這類標籤以及在dubbo配置的標籤都是屬於自定義的標籤,標籤的解析,已經由作者就行了解析,我們用就好了,那麼我們今天就進行開發一個自己的標籤,模擬 &