日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

020_程序方法

發布時間:2025/5/22 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 020_程序方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 方法變量在存于實現了TemplateMethodModel接口的模板中。這個接口包含一個方法: TemplateModel exec(java.util.List arguments)。

2. 當使用FTL方法調用表達式時, exec方法將會被調用。形參將會包含FTL方法調用形參的值。exec方法的返回值給出了FTL方法調用表達式的返回值。

3. TemplateMethodModelEx接口擴展了TemplateMethodModel接口。它沒有添加任何新方法。事實上這個對象實現這個標記接口是給FTL引擎暗示, 形式參數應該直接以TemplateModel的形式放進java.util.List。否則將會以String形式放入list。

4. 例子

4.1. 新建一個名為FMProgrammingMethod的動態Web工程, 同時添加相關jar包。

4.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>();// 創建單個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.setDefaultEncoding("utf-8");cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);map.put(path, cfg);return cfg;}}

4.3. 編寫IndexOfMethod.java

package com.fm.action;import java.util.List; import freemarker.template.SimpleNumber; import freemarker.template.SimpleScalar; import freemarker.template.TemplateMethodModelEx; import freemarker.template.TemplateModel; import freemarker.template.TemplateModelException;/*** 返回第一個字符串在第二個字符串第一次出現時的索引位置, 如果第二個字符串中不包含第一個字符串, 則返回-1。*/ public class IndexOfMethod implements TemplateMethodModelEx {public TemplateModel exec(List args) throws TemplateModelException {if (args.size() != 2) {throw new TemplateModelException("Wrong arguments");}return new SimpleNumber(((SimpleScalar) args.get(1)).getAsString().indexOf(((SimpleScalar) args.get(0)).getAsString()));} }

4.4. 編寫ProgrammingMethod.java

package com.fm.action;import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; 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 ProgrammingMethod 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("programmingmethod.html");Map<String, Object> root = new HashMap<String, Object>();root.put("indexOf", new IndexOfMethod());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);} }

4.5. 修改web.xml

4.6. 在/WEB-INF/templates目錄下編寫programmingmethod.html

<!DOCTYPE html> <html><head><meta charset="UTF-8" /><title>程序方法</title></head><body><h2>返回第一個字符串在第二個字符串第一次出現時的索引位置</h2>"met"在"something"第${indexOf("met", "something")}個位置<br /><#assign idx = indexOf("foo", "something") /><#if idx == -1>"foo"在"something"中沒有找到。<#else>"foo"在"something"第${idx}個位置</#if></body> </html>

4.7. 運行項目

?

總結

以上是生活随笔為你收集整理的020_程序方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。