FreeMarker自定义指令
代码实现
只需要实现TemplateDirectiveModel接口
public class AuthDirective implements TemplateDirectiveModel {
private Logger LOGGER = (Logger) LoggerFactory.getLogger(this.getClass());
@Override
public void execute(Environment environment, Map map, TemplateModel[] templateModels, TemplateDirectiveBody templateDirectiveBody) throws TemplateException, IOException {
try {
//业务相关的操作
boolean hasRight;
if (hasRight) {
if (templateDirectiveBody != null) {
templateDirectiveBody.render(environment.getOut());
}
} else {
environment.getOut().write("");
}
} catch (Exception e) {
LOGGER.error("AuthDirective指令处理失败", e);
environment.getOut().write("");
}
}
}
配置
<!-- freeMarker配置 -->
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/pages/"/>
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">0</prop>
<prop key="default_encoding">UTF-8</prop>
<prop key="number_format">0.##########</prop>
<prop key="datetime_format">yyyy/MM/dd HH:mm:ss</prop>
<prop key="classic_compatible">true</prop>
<prop key="template_exception_handler">ignore</prop>
</props>
</property>
<property name="freemarkerVariables">
<map>
<!--在这里配置指令 -->
<entry key="auth" value-ref="authDirective"/>
</map>
</property>
</bean>