【问题标题】:Freemarker Interpolation stripping whitespace?Freemarker插值剥离空白?
【发布时间】:2013-01-08 02:10:27
【问题描述】:

我似乎在 textareas 中的前导/尾随空格有问题!

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

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

"   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);设置
  • 添加
  • 在 ${textField} 所在的同一行添加

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

【问题讨论】:

    标签: whitespace freemarker


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 感谢您的回复!感谢有关 strip_whitespace 和 #nt 在这种情况下没有用的信息。我对此感到很困惑,呵呵。我尝试使用您的建议进行替换,并且确实出现了 [S] 和 [N],所以看起来它已经做到了那么远。而且这个模板中绝对没有 块。所以,我想这意味着另一个模板可能正在使用我的强制压缩它?您还有其他方式可以激活压缩吗?
    • 啊哈!没关系,找到导致所有麻烦的 。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2010-10-17
    • 2017-08-23
    • 1970-01-01
    相关资源
    最近更新 更多