测试代码
@Test public void test08(){ List<Group> groups=Arrays.asList(new Group(1,"山口组")); root.put("groups", groups); List<Employee>ems=Arrays.asList(new Employee(1, "张三1", 15), new Employee(2, "张三2", 20),new Employee(3, "张三3", 80)); root.put("emps", ems); freemakerUtil.fprint(root, "08.ftl", fn+"08.html"); }
select模版自定义一个指令
<#--通用型的select语句--> <#macro select id datas value="" defaultValue="" key="" text=""> <select id="${id}" name="${id}"> <option value="">${defaultValue}</option> <#--判断对象是否为map--> <#if datas?is_hash_ex> <#--循环map的key值--> <#list datas?keys as key> <#--如果传进来的key值和默认的值相等,则选中这个值--> <#if key==value> <option value="${key}" selected>${datas[key]}</option> <#else> <option value="${key}">${datas[key]}</option> </#if> </#list> <#else> <#list datas as data> <#--如果key值不为空--> <#if key!=""> <#--传进来的默认value和通过data的key取出来的值相等,则选中--> <#if value==data[key]?string> <option value="${data[key]}" selected>${data[text]}</option> <#else> <option value="${data[key]}" >${data[text]}</option> </#if> <#else> <#if data==value> <option value="${data}" selected>${data}</option> <#else> <option value="${data}">${data}</option> </#if> </#if> </#list> </#if> <select> </#macro>
调用通用select指令的ftl模版文件
<body> <#--通过起别名的形式调用自定义的指令--> <#import "/include/select.ftl" as my/> <#--对象是集合元素有默认值 --> <@my.select id="person" datas=["张三","李四","王五"] value="李四" defaultValue="请选择人" /> <#--对象是集合元素无默认值--> <@my.select id="address" datas=["北京","上海","广州"] defaultValue="请选择地点"/> <#--对象是集合对象无默认值--> <@my.select id="emp" datas=emps key="id" text="name" defaultValue="请选择人" /> <#--对象是map对象有默认值--> <@my.select id="sex" datas={"0":"男","1":"女"} value="1" defaultValue="请选择性别"/> <#--对象是集合对象有默认值--> <@my.select id="group" datas=groups key="id" text="name" value="1" defaultValue="请选择组"/> <#--测试指令调用--> <#macro test datas key> <#list datas as group> ${group[key]} ${group.name} </#list> </#macro> <@test datas=groups key="name"/> </body>
效果如下