`
gzhzh
  • 浏览: 25081 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

巧用Freemarker的自定义方法

阅读更多

  今天想要在Freemarker模版文件里使用HttpServletResponse对象的encodeURL方法,对页面链接的URL进行Encode。据我所知,在Freemarker模版文件里是可以使用scriptlet和其他第三方标签的,可是当我直接在<%%>里书写scriptlet时,却被原封不动地输了出来,于是就尝试引入JSTL,以便使用其中的<c:url value=""/>标签来达到同样目的:

<#assing c=JspTaglibs["http://java.sun.com/jsp/jstl/core"]>
<@c.out value="url"/>

同时将JSTL所需.jar文件都放置在/WEB-INF/lib目录下以及将c.tld文件放置在/WEB-INF目录下,结果却一直报错。在网上到处搜索,包括国外的论坛,发现这个问题一直普遍存在,用了许多别人给出的方法都依然无法解决。正当我苦恼不己时,突然想到上次曾经使用过Freemarker的自定义方法,而我这次只不过是需要使用一个简单的方法而已,自己封装一下使之成为Freemarker支持的方法不就行了,何必大费周折呢?

  要想使用Freemarker支持的自定义方法,需要实现freemarker.template.TemplateMethodModel接口,然后将方法对象放入到Freemarker的数据模型中,这样在ftl文件中便可以像使用Freemarker内置方法一样使用该方法了。 

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));
	}
}

 

   输出模版数据模型时,将EncodeURLMethod的实例对象放入模型中:

dataMap.put("encodeURL", new EncodeURLMethod(context.getResponse()));

 

  在Freemarker模版文件中这样使用:

${encodeURL("/news/showNews.sf?id=123456")}

 

  输出结果实际就是使用response.encodeURL输出的结果。

 

 

 

2
0
分享到:
评论
3 楼 usmeet 2014-08-09  
非常好!非常感谢!
2 楼 sacredlove 2009-12-01  
respose.encodeURL((String)argList.get(0));
这方法不太好使,没有返回结果出来
1 楼 w2gavin 2009-09-02  
帮大忙了,多谢

相关推荐

    Freemarker 应用文档

    Freemarker 是一款基于模板的文本生成工具,使用纯 Java 编写而成。它主要应用于 Web 开发领域,尤其适用于 MVC(Model-View-Controller)架构中的视图层。尽管 Freemarker 具备一定的编程能力,但它更多地依赖于 ...

    小巧的java web 开发类库

    FreeMarker的使用可以将视图与业务逻辑分离,提高代码可读性和可维护性。 4. **Commons-Update Decoration**:这可能是一个定制的装饰器模式实现,用于更新处理或者增强库中的某些功能。装饰器模式允许在运行时给...

    jfinal 1.8 手册

    此外,afterJFinalStart()与beforeJFinalStop()方法则提供了在JFinal启动前后执行自定义代码的能力。 Controller是MVC架构中的“C”,负责处理用户请求并返回响应。在JFinal中,Controller是由Action类来实现的,...

    jfinal手册

    - **FreeMarker 示例**:演示如何使用 FreeMarker 渲染视图。 #### 十一、JFinal 架构及扩展 - **概述**:深入理解 JFinal 的整体架构设计,探讨如何进行扩展。 综上所述,JFinal 以其独特的设计理念和技术特点,...

    JFinal-手册-1.3

    Controller章节讲解了控制器的使用,Action的定义,参数获取方法,文件上传处理,属性设置以及视图渲染方法等。 Interceptor章节则介绍了拦截器的应用场景和配置方法,以及ActionInvocation和InterceptorStack的...

    struts2登录小实例

    8. **模板引擎**:Struts2默认使用FreeMarker作为模板引擎,渲染视图。在登录成功或失败的页面,我们可以使用FreeMarker语法来动态展示数据。 9. **Action上下文**:Struts2的ActionContext封装了请求、响应、...

    Stripes1.4.3

    10. **JSP和FreeMarker视图**:Stripes可以与JSP或FreeMarker模板引擎配合使用,方便地生成动态视图。开发者可以根据喜好选择合适的视图技术。 综上所述,Stripes 1.4.3作为一款高效的Java Web框架,它以简洁、灵活...

    tiny框架说明及二次开发

    - **扩展控制器**:开发者可以通过继承Tiny提供的BaseController基类,或者使用@Controller注解自定义控制器,添加新的业务处理逻辑。 - **定制拦截器**:创建自己的Interceptor类,实现特定的拦截逻辑,然后在...

    world转pdf转swf

    通过Freemarker,你可以定义如何布局PDF页面,或者在生成SWF时添加自定义的交互逻辑。 5. **标签详解**: - **freemaker**: Freemarker模板引擎,用于动态生成文本内容,包括可能在转换过程中用到的配置文件。 - *...

    JFIANL学习文档

    定义Interceptor类,实现Interceptor接口,覆盖其中的方法以执行自定义的逻辑。 #### Interceptor配置 在JFinalConfig类中配置Interceptor,指定其在请求处理链中的位置和作用范围。 #### ActionInvocation ...

    jfinl框架下载

    - 官方文档:JFinal 的官方文档详细介绍了框架的使用方法和插件功能,是学习 JFinal 的重要参考资料。 - 社区交流:JFinal 社区活跃,开发者可以在论坛中提问、分享经验,获取帮助。 - 示例项目:通过分析 `...

    Tomcat与Java.Web开发技术详解源码.rar

    Servlet生命周期包括加载、初始化、服务、销毁四个阶段,开发者可以通过重写相应的方法实现自定义逻辑。 2. JSP(JavaServer Pages):JSP是Java Servlet的一种简化方式,它允许开发者在HTML页面中嵌入Java代码,...

    jFinal相关的代码

    4. **灵活**:JFinal允许自定义配置,支持热加载,便于在开发过程中实时调整和测试。 在压缩包中的“lbkx”文件可能包含了以下几个方面的代码示例: 1. **路由配置**:JFinal通过`config`文件进行路由规则设置,...

    JFinal技术架构浅析.doc

    Handler提供了灵活的扩展机制,可以自定义处理逻辑。 - **Action(动作)**:Action 是业务逻辑的载体,通常对应一个或多个HTTP请求,它包含了具体的业务处理代码。开发者可以在此定义控制器方法,响应前端请求。 ...

    jfinal登录/注册;有验证码验证,可运行

    本项目中,可能会使用第三方库如JCaptcha或者自定义生成算法来生成图片验证码,并将其显示在登录/注册界面。用户输入验证码后,后台会进行比对,只有正确时才会继续处理登录或注册请求。 4. **JFinal的验证机制** ...

    jfinal笔记项目

    3. View:视图层负责渲染并展示数据,JFinal支持FreeMarker和Velocity两种模板引擎。 4. Plugin:插件机制是JFinal的一大特色,可以方便地扩展功能,如数据库连接池Druid、缓存插件、日志插件等。 5. Filter:过滤器...

    jfinal-1.9-src.zip

    4. **灵活性**:JFinal支持多种模板引擎,如FreeMarker、Beetl等,同时提供了自定义渲染方式,满足不同需求。 5. **Plugin机制**:JFinal的Plugin设计允许开发者方便地扩展功能,例如数据库操作、缓存管理、日志...

    moon:Java中的小型Web框架

    开发者可以通过编写自定义中间件或插件来增加新功能。同时,开源社区的支持使得框架不断进化和完善,问题和建议可以通过GitHub上的项目仓库提交。 6. **与其它框架的比较** 相较于Spring Boot、Play Framework等...

Global site tag (gtag.js) - Google Analytics