通过定义Java函数
@Component("cleanHtmlMethodModel")
public class CleanHtmlMethodModel implements TemplateMethodModel {
@Override
@SuppressWarnings("rawtypes")
public Object exec(List args) throws TemplateModelException {
String result = "";
if ((null != args) && (args.size() > 0)) {
String str = args.get(0).toString();
if (null != str) {
return Jsoup.clean(str, Whitelist.none());
}
}
return result;
}
}
在dispatcher-servlet.xml 加入如下代码
<!-- FreeMarker configuration -->
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/freemarker/" />
<property name="defaultEncoding" value="UTF-8" />
<!-- user-defined directives -->
<property name="freemarkerVariables">
<map>
<entry key="schoolDirective" value-ref="schoolDirectiveModel" />
<entry key="headerNavigationDirective" value-ref="headerNavigationDirectiveModel" />
<entry key="footerNavigationDirective" value-ref="footerNavigationDirectiveModel" />
<entry key="headerImageDirective" value-ref="headerImageDirectiveModel" />
<entry key="categoryDirective" value-ref="categoryDirectiveModel" />
<entry key="announcementDirective" value-ref="announcementDirectiveModel" />
<entry key="courseDirective" value-ref="courseDirectiveModel" />
<entry key="latestOrdersDirective" value-ref="latestOrdersDirectiveModel" />
<entry key="liveCourseDirective" value-ref="liveCourseDirectiveModel" />
<entry key="newsDirective" value-ref="newsDirectiveModel" />
<entry key="questionDirective" value-ref="questionDirectiveModel" />
<entry key="latestReviewDirective" value-ref="latestReviewDirectiveModel" />
<entry key="latestUserDirective" value-ref="latestUserDirectiveModel" />
<entry key="columnCourseDirective" value-ref="columnCourseDirectiveModel" />
<entry key="columnPromoDirective" value-ref="columnPromoDirectiveModel" />
<entry key="prettyTime" value-ref="prettyTimeMethodModel" />
<entry key="prettyFileSize" value-ref="prettyFileSizeMethodModel" />
<entry key="progress" value-ref="progressMethodModel" />
<entry key="cleanHtml" value-ref="cleanHtmlMethodModel" />
</map>
</property>
<!-- FreeMarker setting -->
<property name="freemarkerSettings">
<props>
<prop key="number_format">#</prop> <!-- 数字不包含逗号 -->
<prop key="template_exception_handler">com.school.freemarker.MissingValuesTemplateExceptionHandler
</prop>
</props>
</property>
</bean>
<!-- Resolves view names to protected .ftl resources within the /WEB-INF/freemarker
directory -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true" />
<property name="prefix" value="" />
<property name="suffix" value=".ftl" />
<property name="contentType" value="text/html;charset=UTF-8" />
<property name="exposeSpringMacroHelpers" value="true" />
<property name="exposeRequestAttributes" value="true" />
<property name="exposeSessionAttributes" value="true" />
</bean>
freemarker宏定义:
<#-- 根据枚举类型列表输出枚举值的中文描述 -->
<#macro displayText enumItems value defaultOutput="">
<#compress>
<#assign output=false>
<#list enumItems as x>
<#if "${(x.value)!''}" == "${value}" >
${(x.text)!''}
<#assign output=true>
<#break>
</#if>
</#list>
<#-- 没找到值,输入默认值 -->
<#if !output>
${defaultOutput!''}
</#if>
</#compress>
</#macro>
<#-- 限制字符串内容输出的最大长度 -->
<#macro limitString string maxLength>
<#compress>
<#if string?has_content>
<#if (string?length) gt maxLength>
${string?substring(0, maxLength)}...
<#else>
${string!''}
</#if>
</#if>
</#compress>
</#macro>
<#-- 判断回复者是否为老师 -->
<#function isTeacher instructors userId>
<#if instructors?has_content>
<#list instructors as t>
<#if t.userId == userId>
<#return true>
</#if>
</#list>
</#if>
<#return false>
</#function>
<div class="dl-video-bg"><@limitString "${cleanHtml(item.summary!'')?replace(' ','暂无课程简介')}" 110 /></div>