如果我在某个字段中有&符号(来自db,不能更改),并且我想通过共济会显示这个符号.但是如果显示器(来自共济会)读过&,有什么方法可以做到呢?
重申一下,我不能在手之前更改值(或者至少我不想改变),我想让共济会者“取消”&。
要进行双重迭代,这是一个与许多其他xml放在一起的值。这个值本身就会显示出来,上面有标签.所以就像
<someTag>${wheeeMyValueWithAnAmpersand}<someTag>因此,我不希望所有的符号都逃脱,否则xml看起来会很有趣.就在插值中的那个。
发布于 2012-12-06 23:04:15
哦天啊。
我看到了问题:代码是这样写的:
<#escape x as x?xml>
<#import "small.ftl" as my>
<@my.macro1/>
</#escape>在这个时候,我认为,在它里面的所有调用,都是外景--这当然是文档所暗示的
escape.html
<#assign x = "<test>"> m1>
m1: ${x}
</#macro>
<#escape x as x?html>
<#macro m2>m2: ${x}</#macro>
${x}
<@m1/>
</#escape>
${x}
<@m2/> 产出如下:
<test>
m1: <test>
<test>
m2: <test>然而,当您导入文件时,情况就不是这样了,而转义.逃跑了!
解决方案:http://watchitlater.com/blog/2011/10/default-html-escape-using-freemarker/
上面的链接详细介绍了如何解决问题。实际上,它需要加载一个不同的FreemakerLoader,它用转义标记包装所有模板。
class SomeCoolClass implements TemplateLoader {
//other functions here
@Override
public Reader getReader(Object templateSource, String encoding) throws IOException {
Reader reader = delegate.getReader(templateSource, encoding);
try {
String templateText = IOUtils.toString(reader);
return new StringReader(ESCAPE_PREFIX + templateText + ESCAPE_SUFFIX);
} finally {
IOUtils.closeQuietly(reader);
}
} 这是上面链接中的片段。您可以使用现有的templateLoader创建类,并将所有所需的方法都推迟到此。
发布于 2016-07-23 17:48:51
从FreeMarker 2.3.24开始,不再需要TemplateLoader“黑客”。有一个名为output_format的设置,它指定是否需要转义以及需要转义什么。这可以在全局配置和/或使用template_configurations设置的每个模板名称模式。这样做的推荐方法甚至更简单(来自手册):
..。如果
recognize_standard_file_extensions设置为true(这是默认的incompatible_improvements设置设置为2.3.24或更高),源名以".ftlh“结尾的模板将获得”.ftlh“输出格式,而".ftlx”获取"XML“输出格式
https://stackoverflow.com/questions/13750160
复制相似问题