freemarker 输出有问题...
[#assign optionsHTML = ""]
[#list data as item]
[#assign optionsHTML = optionsHTML + '<option value="' + item.value +'>'+ item.label + '</option>' /]
[/#list]
所以,如果我这样做
<select>
${iptionsHTML}
</select>
otions 的输出得到 html 实体而不是实际的 html....所以
<option value=" .....
即使我这样做
[#assign optionsHTML = ""]
[#list data as item]
[#noescape]
[#assign optionsHTML = optionsHTML + '<option value="' + item.value +'>'+ item.label + '</option>' /]
[/#noescape]
[/#list]
甚至尝试过
<select>
${iptionsHTML?html}
</select>
但更糟糕:(
将
#noescape
放在 #assign
周围没有效果。自动转义仅适用于“直接”嵌入到静态文本(HTML)中的“${...}
-s”。所以无法逃避在其中禁用 #assign
。?html
用于“手动”转义字符串。就像在您的示例中一样,您可以编写
optionsHTML = optionsHTML + '<option value="${item.value?html}>${item.label?html}</option>'
,因为您知道该值稍后将被非自动转义输出,并且字符串文字中的 ${...}
-s 不会自动转义。但是,最好的情况是您可以组织代码,以便生成 HTML 的东西不会在变量内构造 HTML,然后打印该变量,而是将 HTML 直接打印到输出中。这就是 FTL 的设计目的。
[#assign optionsHTML = ""]
[#list data as item]
[#assign optionsHTML = optionsHTML + '<option value="' + item.value +'>'+ item.label + '</option>' /]
[/#list]
<select>
[#noescape]
${optionsHTML}
[/#noescape]
</select>
<select>
[#list data as item]
<option value="${item.value}">${item.label}</option>
[/#list]
</select>
处理此问题的最佳且简单的方法如下代码
<#escape x as x?html>${deposit.checkNumber}</#escape>
,这导致我使用?no_esc
方法,例如:
<#assign url += “${url?contains(‘?’)?then(‘&’, ‘?’)?no_esc}” + “redirect=true” />
顺便说一句,如果有人知道在 Freemarker 中向 url 添加参数的更简单方法(就像 Thymeleaf