设置 output_format 时 FreeMarker 模板中的 NonStringException
NonStringException in FreeMarker template when output_format is set
我有一个 FreeMarker 模板,我想在其中指定输出格式以转义 XML 文件中的某些字符。模板示例如下所示:
<#ftl output_format="XML">
<#assign field1>
TestField&1&
</#assign>
<#assign field2>
<#if field1?trim?length == 0>
TestField&1&
<#else>
TestField&2&
</#if>
</#assign>
<?xml version="1.0" encoding="UTF-8"?>
<FIELD2>${field2}</FIELD2>
转换工作正常(转义除外),除非我将 <#ftl output_format="XML">
指令放入我的模板中。之后我得到一个 NonStringException:
freemarker.core.NonStringException: For "?trim" left-hand operand: Expected a string or something automatically convertible to string (number, date or boolean), but this has evaluated to a markup_output (wrapper: f.c.TemplateXMLOutputModel):
==> field1 [in template "Test.ftl" at line 6, column 9]
基本上 field1?trim?length
不起作用,因为 field1
不再被评估为字符串。
如果没有输出格式指令,一切都会按预期进行。
我使用的 FreeMarker 版本是 2.3.26-incubating.
要防止 XML 出现此错误 outputformat,您可以为 field1 分配字符串值:
<#ftl output_format="XML">
<#assign field1 ="TestField&1&"/>
您可以使用 markup_string
内置函数,returns 将标记存储在标记输出值中作为字符串。
<#ftl output_format="XML">
<#assign field1>
TestField&1&
</#assign>
<#assign field2>
<#if field1?markup_string?trim?length == 0>
TestField&1&
<#else>
TestField&2&
</#if>
</#assign>
<?xml version="1.0" encoding="UTF-8"?>
<FIELD2>${field2}</FIELD2>
我有一个 FreeMarker 模板,我想在其中指定输出格式以转义 XML 文件中的某些字符。模板示例如下所示:
<#ftl output_format="XML">
<#assign field1>
TestField&1&
</#assign>
<#assign field2>
<#if field1?trim?length == 0>
TestField&1&
<#else>
TestField&2&
</#if>
</#assign>
<?xml version="1.0" encoding="UTF-8"?>
<FIELD2>${field2}</FIELD2>
转换工作正常(转义除外),除非我将 <#ftl output_format="XML">
指令放入我的模板中。之后我得到一个 NonStringException:
freemarker.core.NonStringException: For "?trim" left-hand operand: Expected a string or something automatically convertible to string (number, date or boolean), but this has evaluated to a markup_output (wrapper: f.c.TemplateXMLOutputModel): ==> field1 [in template "Test.ftl" at line 6, column 9]
基本上 field1?trim?length
不起作用,因为 field1
不再被评估为字符串。
如果没有输出格式指令,一切都会按预期进行。
我使用的 FreeMarker 版本是 2.3.26-incubating.
要防止 XML 出现此错误 outputformat,您可以为 field1 分配字符串值:
<#ftl output_format="XML">
<#assign field1 ="TestField&1&"/>
您可以使用 markup_string
内置函数,returns 将标记存储在标记输出值中作为字符串。
<#ftl output_format="XML">
<#assign field1>
TestField&1&
</#assign>
<#assign field2>
<#if field1?markup_string?trim?length == 0>
TestField&1&
<#else>
TestField&2&
</#if>
</#assign>
<?xml version="1.0" encoding="UTF-8"?>
<FIELD2>${field2}</FIELD2>