freemarker特殊字符转义(noparse)标签
自动生成mapper的时候遇到特殊字符需要转义,特此记录一下
如:
<#list columnList as params>
<if test=" ${params.entryName} != null "> ${params.fieldName} = #{${params.entryName} }, </if>
</#list>
这样会报错
freemarker.core.ParseException: Syntax error in template "mapperxml.ftl" in line 20, column 84:
You can't use "${" here as you are already in FreeMarker-expression-mode. Thus, instead of ${myExpression}, just write myExpression. (${...} is only needed where otherwise static text is expected, i.e, outside FreeMarker tags and ${...}-s.)
at freemarker.core.TokenMgrError.toParseException(TokenMgrError.java:247)
at freemarker.template.Template.<init>(Template.java:215)
at freemarker.cache.TemplateCache.loadTemplate(TemplateCache.java:495)
at freemarker.cache.TemplateCache.getTemplate(TemplateCache.java:409)
at freemarker.cache.TemplateCache.getTemplate(TemplateCache.java:261)
at freemarker.template.Configuration.getTemplate(Configuration.java:1786)
at freemarker.template.Configuration.getTemplate(Configuration.java:1646)
at org.sang.freemaker.fm.FreeMakerImpl.execute(FreeMakerImpl.java:66)
at org.sang.freemaker.fm.FreeMakerImpl.executeBreakErr(FreeMakerImpl.java:125)
at org.sang.freemaker.Client.main(Client.java:36)
应该写成
<#list columnList as params>
<if test=" ${params.entryName} != null "> ${params.fieldName} = <#noparse># {</#noparse> ${params.entryName} }, </if>
</#list>
这样就能正确生成了。
<#noparse>的作用:
FreeMarker 不会在这个指令体中间寻找FTL标签, 插值和其他特殊的字符序列,除了noparse的结束标记。