Freemarker 自定义标签实现

本文介绍了如何在Freemarker 2.3.21版本中实现自定义标签,通过实现TemplateDirectiveModel接口的execute方法,并通过Spring bean XML进行配置。文中提供了一种在旧版本中可能可行的macro实现方式,以及Java代码实现自定义指令的示例。
摘要由CSDN通过智能技术生成

摘要: 采用的是freemarker版本 2.3.21 采用 BeansWrapperBuilder替代DEFAULT_WRAPPER 的方式。

1  自定义标签需要实现TemplateDirectiveModel这个接口中的execute方法  实例代码如下

public class UserListDirective implements TemplateDirectiveModel{
	
	@Autowired
	private UserDAO  userDao;
	@Override
	public void execute(Environment env, Map params, TemplateModel[] loopVars,
			TemplateDirectiveBody body) 
                      throws TemplateException, IOException {
		String name = params.get("name").toString();
		List<User> userlist = userDao.findByProperty("name", name);

		env.setVariable("userList", getBeansWrapper().wrap(userlist));
		body.render(env.getOut());
	}
	
	public static BeansWrapper getBeansWrapper(){
		BeansWrapper beansWrapper = 
                         new BeansWrapperBuilder(Configuration.VERSION_2_3_21).build();
		return beansWrapper;
	}
}



2 配置 UserListDirective 到spring  bean xml中

<bean id="userListDirective" class="com.action.directive.UserListDirective"></bean>


3 将spring bean 设置到freemarkerConfig全局变量中去。 
<bean id="freemarkerConfig2"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="/" />
        <property name="freemarkerVariables">
            <map >
                <entry key="userListDirective" value="userListTag" />
            </map>
        </property>
        <property name="freemarkerSettings">
            <props>
                <prop key="template_update_delay">0</prop>
                <prop key="defaultEncoding">UTF-8</prop>
                <prop key="url_escaping_charset">UTF-8</prop>
                <prop key="locale">zh_CN</prop>
                <prop key="boolean_format">true,false</prop>
                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
                <prop key="date_format">yyyy-MM-dd</prop>
                <prop key="time_format">HH:mm:ss</prop>
                <prop key="number_format">0.######</prop>
                <prop key="whitespace_stripping">true</prop>
            </props>
        </property>
    </bean>


4 ftl文件中的访问方式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值