欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

freemarker自定义标签(一)【适用于JeecmsV8】

程序员文章站 2022-06-09 08:03:36
...
其中所用框架Spring,SpringMVC,Hibernate,freemarker
//首先要新建一个实现TemplateDirectiveModel接口的类
public class GettingGanonDirective implements TemplateDirectiveModel
//由于使用的hibernate4,所以自动注入的sessionFactory。
@Autowired
private SessionFactory sessionFactory;
要适用自定义标签,主要的就是实现execute方法
@Override
public void execute(Environment environment, Map map, TemplateModel[] templateModels, TemplateDirectiveBody templateDirectiveBody)
        throws TemplateException, IOException {
/*(参数:
environment或env用到它的getOut()方法来得到Writer对象,
map或者params可以适用get("key")方法来得到在模板中使用自定义标签是传入的参数,
剩下俩还不晓得,TemplateDirectiveBody 好像是用来传对象到模板中
)*/
    Writer out = environment.getOut();
//得到writer对象,作用相当于在servlet中响应ajax时候使用的writer

    System.err.println(map+"size:"+map.size());
    if (map.size()!=0&&map!=null) {
        TemplateModel paramValue = (TemplateModel) map.get("channelId");
//取得key为channelId的参数值

        if (paramValue.equals("") || paramValue != null) {
/*int channelId = Integer.parseInt("paramValue");*/
            Session session = sessionFactory.getCurrentSession();
//通过注入的sessionFactory的getCurrentSession()方法获取当前线程下的Session对象

            String sql = "SELECT t1.channel_id,t2.channel_name FROM jc_channel t1\n" +
                    "LEFT JOIN jc_channel_ext t2 \n" +
                    "ON t1.channel_id=t2.channel_id\n" +
                    "WHERE t1.channel_id = " + paramValue;
            List list = session.createSQLQuery(sql).list();
            StringBuffer stringBuffer = new StringBuffer();
            ArrayList<String> arrayList=null;
            for (Object object :list) {
                Object[] objects = (Object[]) object;
                /*for (Object object2:objects) {
                    System.err.println("取得的内容为:"+object2.toString());
                }*/
                String[] strings = new String[2];
                for (int i = 0; i < strings.length ; i++) {
                    strings[i] = objects[i].toString();
                }
                stringBuffer.append("栏目ID:"+objects[0].toString()+"</br>栏目名称:"+objects[1]);
            }
            System.err.println(arrayList);
            System.err.println(stringBuffer.toString());
            out.write(stringBuffer.toString());
//最终,通过Writer对象的write()方法将查询到的值输出到模板中
        } else {
            out.write("参数异常,找不到目标id");
        }
    }else{
        out.write("无参数,请确认自定义宏参数有效!");
    }

}
<!--测试用标签-->
将其加入spring管理
<beanid="dz_getChannel"class="com.jeecms.cms.action.directive.testForDz.GettingGanonDirective"/>
property中
directive.dz_getChannel=dz_getChannel
在Spring配置文件中获取标签配置,并引入相应peoperty的值。

<propertyname="freemarkerVariables"value="#{propertyUtils.getBeanMap('directive.')}"/>

在模板中引入自定义的标签

[@dz_getChannel channelId='75'][/@dz_getChannel]

直接加载模板,控制台输出:freemarker自定义标签(一)【适用于JeecmsV8】

栏目ID:75</br>栏目名称:新闻

页面效果:

freemarker自定义标签(一)【适用于JeecmsV8】freemarker自定义标签(一)【适用于JeecmsV8】freemarker自定义标签(一)【适用于JeecmsV8】