[Freemarker] Freemarker自定义函数

狄溪叠
2023-12-01

Freemarker自定义函数

内容

笔者学习慕课网freemarker自定义函数课程的笔记

自定义函数

在Java中编写,用ModelAndView添加到flt文件中使用

例子:排序函数

  • 排序函数实现类SortMethod
    此类实现TemplateMethodModelEx接口,写sort_int中的排序逻辑

    public class SortMethod implements TemplateMethodModelEx{
        @Override
        public Object exec(List arguments) throws TemplateModelExcetion{
            //获得第一个参数
            //所有参数都要先转成SimpleSequence
            SimpleSequence arg0 = (SimpleSequence)arguments.get(0);
            //把参数转换为list
            List<BigDecimal> list = arg0.toList();
            //排序
            Collection.sort(list,
                new Comparator<BigDecimal>() {
                    @Override
                    public int compare(BigDecimal o1,BigDecimal o2) {
                    return o1.intValue() - o2.intValue(); //升序
                    }
                }
            );
            return list; //函数返回值
        }
    }
    
  • controller类
    将类SortMethod添加到ModelAndView作为函数,供flt文件中使用

    @Controller
    @RequestMapping("/")
    public class Cp1Controller{
        @RequestMapping("/cp1")
        public ModelAndView index() {
            //创建路径
            ModelAndView mv = new ModelAndView("cp1");
            //把函数处理类传入视图
            mv.addObject("sort_int",new SortMethod() );
            return mv;
        }
    }
    
  • 在.flt文件使用
    直接当函数使用

    <#assign myList=[2,3,1,5,4]/>
    <#list sort_int(myList) as item>
        ${item},
    </#list>
    

List内置排序函数

<li>
    <#assign myList=[2,3,1,5,4] />
    <#-- sort为函数,reverse为倒序-->
    <#list myList?sort?reverse as item>
        <#-- item_index为下标 -->
        ${item_index}:${item}<br/>
    </#list>

    ${myList?size}<br/>
    ${myList[3]}<br/>
</li>
 类似资料: