Freemarker插值剥离空白?

时间:2013-01-08 02:10:27

标签: whitespace freemarker

我似乎遇到了textareas中前导/尾随空格的问题!

如果最后一个用户在跨越多行的前导/尾随空格的textarea中键入值,则它们都会消失,除了开头的一个空格&端。

实施例: 如果文本框具有以下行:(仅用于帮助说明空格的引号)

"   3.0"
"  2.2  "
"0.3   "

它将作为

保存在后端
"<textarea id=... >   3.0/n  2.2  /n0.3   </textarea>"

我的模板(对于这部分)非常简单(整个模板,不那么容易......):
$ {label} $ {textField}

当我再次加载值时,我注意到getTextField()正确地获取了前面引用的所需字符串......但是当我查看它显示的html页面时

" 3.0"
"2.2"
"0.3 "

当然,当“View Sourcing”它没有在getTextField()中看到的字符串

我尝试了什么:

  • 确保后端有setWhitespaceStripping(false);设置
  • 添加&lt; #ftl strip_whitespace = false&gt;
  • 添加&lt; #nl&gt;与$ {textField}
  • 在同一行

无论我尝试过什么,我都没有运气在插值后保留空格。 任何帮助将非常感谢!

1 个答案:

答案 0 :(得分:2)

也许您在<#compress>...</#compress>(或<@compress>...</@compress>)区域内。那些在运行时过滤整个输出并减少空白,无论它来自何处。我建议不要使用此指令。它使输出稍微小一点,但它有运行时开销,并且可能在这种情况下破坏输出。

FreeMarker插值不会从插入的值中删除空格,也不会以任何方式更改值。但是,如果您在词法<#escape ...>....</#escape>内,则会自动应用。但你不可能有一个破坏空白的逃避表达。但是可以肯定的是,你可以检查相同的模板文件中是否有<#escape ...>(不需要在别处检查,因为它不是运行时指令)。

strip_whitespace#nt仅在解析期间(在执行之前)删除空格,因此它们是不相关的。

您还可以在插入之前检查插入的中的空格是否仍然存在:

${textField?replace(" ", "[S]")?replace("\n", "[N]")?replace("\t", "[T]")}

如果您发现它们已被删除,则可能意味着在将值放入数据模型之前已将其删除。那么如果不是FreeMarker。