Freemaker自定义标签

本文介绍如何在Freemarker中创建自定义指令,通过实现TemplateDirectiveModel接口并配置bean容器,实现动态获取数据并展示在页面上。文章详细讲解了参数传递、异常处理及标签使用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新建模板类,继承TemplateDirectiveModel

public class ConsultationDirective implements TemplateDirectiveModel {

    @Override
    public void execute(Environment environment, Map map, TemplateModel[] templateModels, TemplateDirectiveBody templateDirectiveBody){

        try {
            int siteId = Integer.valueOf(map.get("siteId").toString());
            int type = Integer.valueOf(map.get("type").toString());
            int pageNo = Integer.valueOf(map.get("pageNo").toString());
            int pageSize = Integer.valueOf(map.get("pageSize").toString());

            Pagination page = consultationDao.getJcConsultationEntityPage(siteId,type,pageNo,pageSize);
            List list = new ArrayList();
            int count = 0;
            if(page != null){
                list = page.getList();
                count = page.getTotalCount();
            }
            environment.setVariable("ConsultationList", getBeansWrapper().wrap(list));
            environment.setVariable("TotalCount", getBeansWrapper().wrap(count));
            templateDirectiveBody.render(environment.getOut());
        }catch (Exception e){
            e.printStackTrace();
        }

    }

    public static BeansWrapper getBeansWrapper(){
        BeansWrapper beansWrapper =
                new BeansWrapperBuilder(Configuration.VERSION_2_3_21).build();
        return beansWrapper;
    }

    @Autowired
    private ConsultationDao consultationDao;
}

配置bean容器

<bean id="cms_ConsultationDirective_list" class="com.jeecms.cms.action.directive.ConsultationDirective"/>

在freemarkerConfig中配置标签变量

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
		<!--获取标签配置-->
		<property name="freemarkerVariables" value="#{propertyUtils.getBeanMap('directive.')}"/>
		<property name="templateLoaderPath" value=""/>
		<property name="freemarkerSettings">
			<props>
				<prop key="tag_syntax">auto_detect</prop>
				<prop key="template_update_delay">5</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>
				<!--空值处理<prop key="classic_compatible">true</prop>-->
				<prop key="auto_import">/WEB-INF/ftl/jeecms/index.ftl as p,/WEB-INF/ftl/spring.ftl as s</prop>
			</props>
		</property>
	</bean>

此处为全局变量,需要在对应的.properties中添加对应的映射

directive.cms_ConsultationDirective_list=cms_ConsultationDirective_list

使用标签访问

[@cms_ConsultationDirective_list siteId=siteId type=type pageNo=pageNo pageSize=pageSize]
            [#list ConsultationList as a]
            <li>
                <a href="/replyDetails.jspx?conId=${a.consultationId!}">[@text_cut s=a.theme! len='12' append='...'/] ${TotalCount}</a>
            </li>
            <div></div>
            [/#list]
            [/@cms_ConsultationDirective_list]

或者

<@cms_ConsultationDirective_list name="zhangsan">
    <#if userList?? && userList?size gt 0>
        <#list userList as user>
            <a href="">${user.name}</a>
        </#list>
    </#if> 
</@cms_ConsultationDirective_list >

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值