2

我似乎在文本区域中的前导/尾随空格有问题!

如果最后一个用户在文本区域中输入了跨多行前导/尾随空格的值,则除了开头和结尾的一个空格外,它们都会消失。

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

"   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 "

当然,当“查看采购”时,它没有在 getTextField() 中看到的字符串

我试过的:

  • 确保后端有 setWhitespaceStripping(false); 放
  • 添加 <#ftl strip_whitespace=false>
  • 在 ${textField} 所在的同一行添加 <#nl>

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

4

1 回答 1

2

也许您在<#compress>...</#compress>(或<@compress>...</@compress>)块内。那些在运行时过滤整个输出并减少空格,无论它来自哪里。我建议不要使用这个指令。它使输出变得更小,但它具有运行时开销,并且在这种情况下可能会破坏输出。

FreeMarker 插值不会从插入的值中删除空格,也不会以任何方式更改值。除非,如果您在词法上位于<#escape ...>....</#escape>, 块中,则会自动应用。但是你不太可能有一个破坏空白的转义表达式。但可以肯定的是,您可以检查同一个<#escape ...>模板文件中是否有任何内容(无需检查其他地方,因为它不是运行时指令)。

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

您还可以在插入之前检查插入值中是否仍然存在空格,如下所示:

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

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

于 2013-01-08T21:50:49.937 回答