首先,要先增加一个实现TemplateMethodModel接口的类,代码如下(以下代码从网上随便摘的):
- import java.util.List;
- import javax.servlet.http.HttpServletResponse;
- import freemarker.template.TemplateMethodModel;
- import freemarker.template.TemplateModelException;
- /**
- * Freemarker自定义方法
- * 实现response.encodeURL(url)功能
- */
- public class EncodeURLMethod implements TemplateMethodModel {
- private HttpServletResponse response;
- /**
- * 带参数的构造函数
- * @param response HttpServletResponse对象
- */
- public EncodeURLMethod(HttpServletResponse response)
- {
- this.response=response;
- }
- /**
- * 执行方法
- * @param argList 方法参数列表
- * @return Object 方法返回值
- * @throws TemplateModelException
- */
- public Object exec(List argList) throws TemplateModelException {
- if(argList.size()!=1) //限定方法中必须且只能传递一个参数
- {
- throw new TemplateModelException("Wrong arguments!");
- }
- //返回response.encodeURL执行结果
- return response.encodeURL((String)argList.get(0));
- }
- }
接着,找到ofbiz目录下的framework/webapp/config/frameworkTransforms.properties文件,增加一行
- ofbizUrl=org.ofbiz.webapp.ftl.OfbizUrlTransform
- ofbizContentUrl=org.ofbiz.webapp.ftl.OfbizContentTransform
- ofbizCurrency=org.ofbiz.webapp.ftl.OfbizCurrencyTransform
- ofbizAmount=org.ofbiz.webapp.ftl.OfbizAmountTransform
- setRequestAttribute=org.ofbiz.webapp.ftl.SetRequestAttributeMethod
- renderWrappedText=org.ofbiz.webapp.ftl.RenderWrappedTextTransform
- #在这里增加
- EncodeUrl=sample.EncodeURLMethod
最后,你可以直接在Freemarker模版文件中这样使用:
${encodeURL("/news/showNews.sf?id=123456")}
(对于FrameMarker自定义标签,也可以采用如上步骤)