1.快速体验
/**
*
* @author guokaige
* @Date 2019年5月7日 上午10:54:42
*/
@Component
public class CustomTagDirective implements TemplateDirectiveModel {
private static final String METHOD_KEY = "method";
@SuppressWarnings("rawtypes")
@Override
public void execute(Environment environment, Map map, TemplateModel[] templateModels, TemplateDirectiveBody templateDirectiveBody) throws TemplateException, IOException {
if (map.containsKey(METHOD_KEY)) {
DefaultObjectWrapperBuilder builder = new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_28);
//从map获取参数
String method = map.get(METHOD_KEY).toString();
switch (method) {
case "tagsList":
// 将数据对象转换成对应的TemplateModel
TemplateModel tm = builder.build().wrap(Lists.newArrayList("limitTag","testTag"));
environment.setVariable("dataList", tm);
break;
// case other...
default:
break;
}
}
templateDirectiveBody.render(environment.getOut());
}
}
@Configuration
public class FreeMarkerConfig {
@Autowired
protected freemarker.template.Configuration configuration;
@Autowired
protected CustomTagDirective customTagDirective;
/**
* 添加自定义标签
*/
@PostConstruct
public void setSharedVariable() {
/*
* 向freemarker配置中添加共享变量;
*/
configuration.setSharedVariable("limitShow", customTagDirective);
}
}
<@limitShow method="tagsList" pageSize="10">
<#list dataList as item>
<li class="tag-li">
${item ?if_exists}
</li>
</#list>
</@limitShow>