008_setting指令
1. setting指令為進一步的處理而設置。設置是影響FreeMarker行為的值。<#setting name=value />, name: 設置的名稱, 不是表達式。value: 設置的新值, 是表達式。
2. locale: 輸出的本地化(語言)。它可以影響數字, 日期等顯示格式。它的值是由語言編碼(小寫兩個字母的ISO-639編碼)和可選的國家碼(大寫的兩個字母ISO-3166編碼)組成的字符串, 它們以下劃線相分隔。中文中國本地化設置<#setting locale = "zh_CN" />。
3. number_format設置
3.1. 當沒有指定確定的格式化形式時, 用來轉化數字到字符串形式的數字格式化設置。可以是下列中的一個預定義值number(默認的, 用戶看), computer(計算機識別, 可以給編程語言看), currency(貨幣)或percent(百分數)。
3.2. Java數字格式語法(java.text.DecimalFormat)
3.2.1. pattern="0", 這里的0代表數字, 如果number的位數大于等于pattern的0的個數, result=number。否則不夠的位數以0填充。
3.2.2. #號和0的含義相同, 都是代表數字, 不同的是其不會用0填充, 不夠位數就不顯示。
3.2.3. E使用科學計數法。
3.2.4. 在金融和統計學實踐中, 四舍五入都是根據所謂的一半原則, 這就意味著對最近的"鄰居"進行四舍五入, 除非離兩個鄰居距離相等, 這種情況下, 它四舍五入到偶數的鄰居。
4. boolean_format設置
4.1. 以逗號分隔的一對字符串來分別展示true和false值, 當沒有指定確定的格式時(比如: 在${booleanValue}中), 將轉換布爾值到字符串。
4.2. boolean_format的默認字符串是"true,false"。
4.3. FreeMarker還自帶了一個boolean_format是c的值。
4.4. boolean_format用戶還可以自定義, 使用逗號分割真和假的值。
5. date_format, time_format, datetime_format設置
5.1. date_format, time_format, datetime_format根據指定的格式將日期、時間、日期-時間值轉換為字符串。
5.2. date_format設置僅僅格式于存儲的無時間部分的值; time_format僅僅格式于存儲無日期部分的值; 而datetime_format僅僅格式于日期-時間值。這些設置也影響進行了?time, ?date, 和?datetime操作的格式。
5.3. 根據java.text.DateFormat可以將日期、時間、日期-時間格式為short(短格式)、medium(中等格式)、long(長格式)和full(完整格式)。
5.4. 根據java.text.SimpleDateFormat指定的格式將日期、時間、日期-時間值轉換為字符串。
| 字母 | 日期或時間元素 | 表示 | 示例 |
| G | 時代, 紀元標志符 | Text | 公元 |
| y | 年 | Year | 1996; 96 |
| M | 年中的月份 | Month | 07; 11 |
| w | 年中的周數 | Number | 27 |
| W | 月份中的周數 | Number | 1 |
| D | 年中的天數 | Number | 189 |
| d | 月份中的天數 | Number | 10 |
| F | 月份中的星期 | Number | 3 |
| E | 星期 | Text | 星期四 |
| a | AM/PM標記 | Text | PM |
| H | 一天中的小時數(0-23) | Number | 23 |
| k | 一天中的小時數(1-24) 0是24 | Number | 24 |
| K | AM/PM中的小時數(0-11) | Number | 0 |
| h | AM/PM中的小時數(1-12) 0是12 | Number | 12 |
| m | 小時中的分鐘數 | Number | 42 |
| s | 分鐘中的秒數 | Number | 59 |
| SS | 毫秒數 | Number | 987 |
| z | 時區 | General time zone | CST(China Standard Time) |
| Z | 時區 | RFC 822 time zone | +0800(東八區) |
5.5. ISO 8601:2004格式
5.5.1. 精度選擇
- ms: 毫秒, 通常顯示3位數字。
- s: 秒。
- m: 分。
- h: 小時。
5.5.2. 時區偏移可見性選項
- fz: "Force Zone", 對java.sql.Time和java.sql.Timestamp值也起作用。
- nz: "No Zone", ?從不顯示時區偏移。
5.5.3. 時區選項
- u: 使用UTC來代替time_zone設置建議的內容。
- fu: "Force UTC", 也就是說, 使用 UTC 來代替time_zone或sql_date_and_time_time_zone設置建議的內容。這會影響java.sql.Date和java.sql.Time值。
6. time_zone時區的名稱來顯示并格式化時間。默認情況下, 使用JVM的時區。也可以是Java時區API接受的值, 例如: <#setting time_zone = "GMT+08" />。
7. sql_date_and_time_time_zone對于來自SQL數據庫(更精確地, 就是java.sql.Time和java.sql.Timestamp對象)的僅日期和僅時間值來說, FreeMarke 會使用該時區來代替 time_zone 設置項指定的時區。我們一般也設置東八區<#setting sql_date_and_time_time_zone = "GMT+08" />。
8. url_escaping_charset用來URL轉義的字符集, 來計算轉義(%XX)的部分。通常包含FreeMarker的框架應該設置它, 所以不應該在模板中來設置。一般設置utf-8。
9. output_encoding告訴FreeMarker輸出的字符集是什么。通常包含FreeMarker的框架應該設置它, 所以不應該在模板中來設置。一般設置utf-8。
10. 例子
10.1. 新建一個名為FMSetting的動態Web工程, 同時添加相關jar包。
10.2. 編寫FMFactory.java
package com.fm.util;import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import freemarker.template.Configuration; import freemarker.template.TemplateExceptionHandler;public class FMFactory {private final static FMFactory instance = new FMFactory();private FMFactory() {}public static FMFactory getInstance() {return instance;}private Map<String, Configuration> map = new ConcurrentHashMap<String, Configuration>();public synchronized Configuration getCfg(Object servletContext, String path) {if(null != map.get(path)) {return map.get(path);}Configuration cfg = new Configuration(Configuration.VERSION_2_3_22);cfg.setServletContextForTemplateLoading(servletContext, path);cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);map.put(path, cfg);return cfg;}}10.3. 編寫SettingDirective.java
package com.fm.action;import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.sql.Time; import java.sql.Timestamp; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.fm.util.FMFactory; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException;public class SettingDirective extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Configuration cfg = FMFactory.getInstance().getCfg(req.getServletContext(), "/WEB-INF/templates");Template template = cfg.getTemplate("setting.html");Map<String, Object> root = new HashMap<String, Object>();root.put("javaDate", new Date(System.currentTimeMillis()));root.put("sqlDate", new java.sql.Date(System.currentTimeMillis()));root.put("sqlTime", new Time(System.currentTimeMillis()));root.put("sqlTimestamp", new Timestamp(System.currentTimeMillis()));Writer out = new OutputStreamWriter(resp.getOutputStream());try {template.process(root, out);} catch (TemplateException e) {e.printStackTrace();}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }10.4. 修改web.xml
10.5. 在/WEB-INF/templates下編寫setting.html
<!DOCTYPE html> <html><head><meta charset="UTF-8" /><title>setting指令</title></head><body><h2>中文中國和德語德國數字顯示</h2><#setting locale = "de_DE" />德語德國: ${1234.56}<br /><#setting locale = "zh_CN" />中文中國: ${1234.56}<h2>number_format設置 </h2><#setting number_format = "currency" />${1234.56}<br /><#setting number_format = "percent" />${1234.56}<br /><#setting number_format = "computer" />${1234.56}<br /><br />1.234使用"0.#"模式: ${1.234?string["0.#"]}<br />1.234使用"0.##"模式: ${1.234?string["0.##"]}<br />1.234使用"0.###"模式: ${1.234?string["0.###"]}<br />1.234使用"0.####"模式: ${1.234?string["0.####"]}<br /><br />1使用"000.00"模式: ${1?string["000.00"]}<br />12.1使用"000.00"模式: ${12.1?string["000.00"]}<br />123.456使用"000.00"模式: ${123.456?string["000.00"]}<br /><br />1.2使用"0"模式: ${1.2?string["0"]}<br />1.8使用"0"模式: ${1.8?string["0"]}<br />1.5使用"0"模式: ${1.5?string["0"]}<br />2.5使用"0"模式: ${2.5?string["0"]}<br /><br />12345使用"0.##E0"模式: ${12345?string["0.##E0"]}<h2>boolean_format設置</h2><#setting boolean_format = "男,女" />${true}<br />${false}<h2>默認時間</h2>javaDate?date: ${javaDate?date}<br />javaDate?time: ${javaDate?time}<br />javaDate?datetime: ${javaDate?datetime}<br />sqlDate: ${sqlDate}<br />sqlTime: ${sqlTime}<br />sqlTimestamp: ${sqlTimestamp}<h2>date_format = "short" time_format = "short" datetime_format = "short"</h2><#setting date_format = "short" /><#setting time_format = "short"/><#setting datetime_format = "short" />javaDate?date: ${javaDate?date}<br />javaDate?time: ${javaDate?time}<br />javaDate?datetime: ${javaDate?datetime}<br />sqlDate: ${sqlDate}<br />sqlTime: ${sqlTime}<br />sqlTimestamp: ${sqlTimestamp}<h2>date_format = "medium" time_format = "medium" datetime_format = "medium"</h2><#setting date_format = "medium" /><#setting time_format = "medium"/><#setting datetime_format = "medium" />javaDate?date: ${javaDate?date}<br />javaDate?time: ${javaDate?time}<br />javaDate?datetime: ${javaDate?datetime}<br />sqlDate: ${sqlDate}<br />sqlTime: ${sqlTime}<br />sqlTimestamp: ${sqlTimestamp}<h2>date_format = "long" time_format = "long" datetime_format = "long"</h2><#setting date_format = "long" /><#setting time_format = "long"/><#setting datetime_format = "long" />javaDate?date: ${javaDate?date}<br />javaDate?time: ${javaDate?time}<br />javaDate?datetime: ${javaDate?datetime}<br />sqlDate: ${sqlDate}<br />sqlTime: ${sqlTime}<br />sqlTimestamp: ${sqlTimestamp}<h2>date_format = "full" time_format = "full" datetime_format = "full"</h2><h2>CST是China Standard Time, 三字母時區ID表示方法已經廢棄。</h2><#setting date_format = "full" /><#setting time_format = "full"/><#setting datetime_format = "full" />javaDate?date: ${javaDate?date}<br />javaDate?time: ${javaDate?time}<br />javaDate?datetime: ${javaDate?datetime}<br />sqlDate: ${sqlDate}<br />sqlTime: ${sqlTime}<br />sqlTimestamp: ${sqlTimestamp}<h2>date_format = "yyyy-MM-dd w" time_format = "kk" datetime_format = "yyyy-MM-dd G HH:mm:ss.SSS a z"</h2><#setting date_format = "yyyy-MM-dd w" /><#setting time_format = "kk" /><#setting datetime_format = "yyyy-MM-dd G HH:mm:ss.SSS a z" />javaDate?date: ${javaDate?date}<br />javaDate?time: ${javaDate?time}<br />javaDate?datetime: ${javaDate?datetime}<br />sqlDate: ${sqlDate}<br />sqlTime: ${sqlTime}<br />sqlTimestamp: ${sqlTimestamp}<h2>date_format = "yyyy年MM月dd日 W" time_format = "KK" datetime_format = "yyyy年MM月dd日 G HH:mm:ss.SSS a Z"</h2><#setting date_format = "yyyy年MM月dd日 W" /><#setting time_format = "KK"/><#setting datetime_format = "yyyy年MM月dd日 G HH:mm:ss.SSS a Z" />javaDate?date: ${javaDate?date}<br />javaDate?time: ${javaDate?time}<br />javaDate?datetime: ${javaDate?datetime}<br />sqlDate: ${sqlDate}<br />sqlTime: ${sqlTime}<br />sqlTimestamp: ${sqlTimestamp}<h2>date_format = "yyyy/MM/dd D" time_format = "hh" datetime_format = "yyyy/MM/dd G HH:mm:ss.SSS a Z"</h2><#setting date_format = "yyyy/MM/dd D" /><#setting time_format = "hh"/><#setting datetime_format = "yyyy/MM/dd G HH:mm:ss.SSS a Z" />javaDate?date: ${javaDate?date}<br />javaDate?time: ${javaDate?time}<br />javaDate?datetime: ${javaDate?datetime}<br />sqlDate: ${sqlDate}<br />sqlTime: ${sqlTime}<br />sqlTimestamp: ${sqlTimestamp}<h2>date_format = "yyyy-MM-dd F" time_format = "HH" datetime_format = "yyyy/MM/dd G HH:mm:ss.SSS a Z"</h2><#setting date_format = "yyyy-MM-dd F" /><#setting time_format = "HH"/><#setting datetime_format = "yyyy/MM/dd G HH:mm:ss.SSS a Z" />javaDate?date: ${javaDate?date}<br />javaDate?time: ${javaDate?time}<br />javaDate?datetime: ${javaDate?datetime}<br />sqlDate: ${sqlDate}<br />sqlTime: ${sqlTime}<br />sqlTimestamp: ${sqlTimestamp}<h2>date_format = "yyyy-MM-dd E" time_format = "iso_ms_nz" datetime_format = "iso_ms_nz"</h2><#setting date_format = "yyyy-MM-dd E" /><#setting time_format = "iso_ms_nz"/><#setting datetime_format = "iso_ms_nz" />javaDate?date: ${javaDate?date}<br />javaDate?time: ${javaDate?time}<br />javaDate?datetime: ${javaDate?datetime}<br />sqlDate: ${sqlDate}<br />sqlTime: ${sqlTime}<br />sqlTimestamp: ${sqlTimestamp}<h2>date_format = "iso_s_fz" time_format = "iso_s_fz" datetime_format = "iso_s_fz"</h2><#setting date_format = "iso_s_fz" /><#setting time_format = "iso_s_fz"/><#setting datetime_format = "iso_s_fz" />javaDate?date: ${javaDate?date}<br />javaDate?time: ${javaDate?time}<br />javaDate?datetime: ${javaDate?datetime}<br />sqlDate: ${sqlDate}<br />sqlTime: ${sqlTime}<br />sqlTimestamp: ${sqlTimestamp}<h2>date_format = "iso_m_u" time_format = "iso_m_u" datetime_format = "iso_m_u"</h2><#setting date_format = "iso_m_u" /><#setting time_format = "iso_m_u"/><#setting datetime_format = "iso_m_u" />javaDate?date: ${javaDate?date}<br />javaDate?time: ${javaDate?time}<br />javaDate?datetime: ${javaDate?datetime}<br />sqlDate: ${sqlDate}<br />sqlTime: ${sqlTime}<br />sqlTimestamp: ${sqlTimestamp}<h2>date_format = "iso_h_fu" time_format = "iso_h_fu" datetime_format = "iso_h_fu"</h2><#setting date_format = "iso_h_fu" /><#setting time_format = "iso_h_fu"/><#setting datetime_format = "iso_h_fu" />javaDate?date: ${javaDate?date}<br />javaDate?time: ${javaDate?time}<br />javaDate?datetime: ${javaDate?datetime}<br />sqlDate: ${sqlDate}<br />sqlTime: ${sqlTime}<br />sqlTimestamp: ${sqlTimestamp}<h2>time_zone = "GMT+10"</h2><#setting time_zone = "GMT+10" />javaDate?date: ${javaDate?date}<br />javaDate?time: ${javaDate?time}<br />javaDate?datetime: ${javaDate?datetime}<br />sqlDate: ${sqlDate}<br />sqlTime: ${sqlTime}<br />sqlTimestamp: ${sqlTimestamp}<h2>time_zone = "GMT+10" sql_date_and_time_time_zone = "GMT+12"</h2><#setting time_zone = "GMT+10" /><#setting sql_date_and_time_time_zone = "GMT+12" />javaDate?date: ${javaDate?date}<br />javaDate?time: ${javaDate?time}<br />javaDate?datetime: ${javaDate?datetime}<br />sqlDate: ${sqlDate}<br />sqlTime: ${sqlTime}<br />sqlTimestamp: ${sqlTimestamp}</body> </html>10.6. 運行項目
總結
以上是生活随笔為你收集整理的008_setting指令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 014_哈希表内建函数
- 下一篇: 015_插值