Spring+Freemarker的自定义标签 实现标签给定时间与当前时间对比

作者: admin 分类: javaweb 发布时间: 2012-11-28 13:51 ė 6 Spring+Freemarker的自定义标签 实现标签给定时间与当前时间对比已关闭评论

下面的三步为Spring + Freemarker组合添加自定义标签:compareTime
compareTime标签的目的是比较传入的日期对象与系统当前日期,返回特定字符串。这里并没最格式化日期的操作,如果仅需要对比到天可以格式化下日期。
1. 修改Spring配置文件:

<bean id="freemarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="WEB-INF/templates/"/>
        <property name="freemarkerSettings">
            <props>
                <prop key="datetime_format">yyyy-MM-dd HH:mm</prop>
                <prop key="default_encoding">UTF-8</prop>
                <prop key="date_format">yyyy-MM-dd</prop>
                <prop key="number_format">0.##########</prop>
            </props>
        </property>
        <property name="freemarkerVariables">
            <map>
                <entry key="xml_escape" value-ref="fmXmlEscape"/>
                <entry key="compareTime" value-ref="compareTime"/>
            </map>
        </property>
    </bean>
...
<bean id="compareTime" class="com.hhdem.sample.utils.freemarker.CompareTime"></bean>

2. 添加CompareTime类,实现TemplateDirectiveModel接口

package com.hhdem.sample.utils.freemarker;
 
import java.io.IOException;
import java.util.Date;
import java.util.Map;
 
import freemarker.core.Environment;
import freemarker.template.SimpleDate;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
 
/**
 * @since 2012-1-9,下午05:16:53
 * @author <a href="mailto:liubingchina@gmail.com">hhdem</a>
 * @version $Id$
 * @comment
 *
 */
public class CompareTime implements TemplateDirectiveModel{
 
  @Override
    public void execute(Environment env, Map params, TemplateModel[] loopVars,
            TemplateDirectiveBody body) throws TemplateException, IOException {
    Date date = new Date();
    String showStr = "";
    try {
      SimpleDate cdate = (SimpleDate) params.get("cdate");
 
      if(date.compareTo(cdate.getAsDate()) == 0) {
        showStr = params.get("eStr").toString();
      } else if (date.compareTo(cdate.getAsDate()) > 0) {
        showStr = params.get("lStr").toString();  // 未来
      } else if (date.compareTo(cdate.getAsDate()) < 0) {
        showStr = params.get("fStr").toString();  // 过去
      }
      env.getOut().write(showStr);
    } catch (RuntimeException e) {
          env.getOut().write(showStr);
        }
    }
}

3. freemarker模板中直接通过下面代码调用即可

<@compareTime cdate=s.startDate lStr='已经过期' fStr='尚未过期'/>

本文出自weicms.net,转载时请注明出处及相应链接。

本文永久链接: http://www.weicms.net/2012/11/28/springfreemarker-custom-taglib.html

0
Ɣ回顶部