freemarker特殊字符转义(noparse)标签


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的结束标记。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM