定义 Freemarker EOL 格式(\n 而不是 \r\n)
Define Freemarker EOL format (\n instead of \r\n)
在我的 Spring 应用程序中,我使用 Freemarker 生成导出文件 - 带有 header 的简单纯文本和循环 <#list></#list>
来呈现项目列表。
@Bean
public freemarker.template.Configuration freemarkerConfiguration() throws IOException, TemplateException {
return new FreeMarkerConfigurationFactoryBean().createConfiguration();
}
// ...
Template template = getFreemarkerTemplate();
Writer fileWriter = getFileWriter(outputFile);
template.process(getExportData(), writer);
// flush and close writer, some additional business logic
我想将行尾的格式从当前的 Windows \r\n
(CRLF) 设置为 Unix \n
(LF)
我实际尝试过但不喜欢或不起作用的东西
- 使用 Notepad++ 手动转换 .ftl 文件 EOL - 我不想用很多编辑器处理我的源文件,还有 IntelliJ Git 插件正在将 EOL 转换为 CRLF - 即使我会修改这个,不能保证我的队友会这样做,也可能是其他地方的问题
- 在每一行的末尾添加
<#rt>${'\n'}
- 它只会污染我的代码,开发人员 必须 记住添加它以防模板更改
- 添加
<#assign str = str?replace(...)
- 似乎不可能,因为此替换仅适用于变量,而不是 当前整个文件 而且我没有找到将模板渲染到其中的方法变量(我可以创建包装器来更改 EOL,但老实说,它看起来也不是一个好的解决方案)
是否有任何 全局 设置 EOL 格式而无需手动和单独操作每个 .ftl 的方法?
没有这样的配置选项(截至 2.3.29)。 FreeMarker 仅按原样输出模板的静态文本部分。尽管您不喜欢这种方法,但我相信最好是在传递给 FreeMarker 的 Writer
中执行此操作。在大多数应用程序中,这些开销根本无关紧要。
避免运行时开销的另一个选项是在包装另一个 TemplateLoader
的自定义 TemplateLoader
中做同样的事情。然而,此类解决方案的问题是换行符有时来自模板外部(即来自数据模型),我认为用户也希望这些换行符也被规范化。
因此,即使它是 FreeMarker 的核心功能(我猜它可能是),它也可能会即时执行此操作,就像您可以使用自定义 Writer
.
在我的 Spring 应用程序中,我使用 Freemarker 生成导出文件 - 带有 header 的简单纯文本和循环 <#list></#list>
来呈现项目列表。
@Bean
public freemarker.template.Configuration freemarkerConfiguration() throws IOException, TemplateException {
return new FreeMarkerConfigurationFactoryBean().createConfiguration();
}
// ...
Template template = getFreemarkerTemplate();
Writer fileWriter = getFileWriter(outputFile);
template.process(getExportData(), writer);
// flush and close writer, some additional business logic
我想将行尾的格式从当前的 Windows \r\n
(CRLF) 设置为 Unix \n
(LF)
我实际尝试过但不喜欢或不起作用的东西
- 使用 Notepad++ 手动转换 .ftl 文件 EOL - 我不想用很多编辑器处理我的源文件,还有 IntelliJ Git 插件正在将 EOL 转换为 CRLF - 即使我会修改这个,不能保证我的队友会这样做,也可能是其他地方的问题
- 在每一行的末尾添加
<#rt>${'\n'}
- 它只会污染我的代码,开发人员 必须 记住添加它以防模板更改 - 添加
<#assign str = str?replace(...)
- 似乎不可能,因为此替换仅适用于变量,而不是 当前整个文件 而且我没有找到将模板渲染到其中的方法变量(我可以创建包装器来更改 EOL,但老实说,它看起来也不是一个好的解决方案)
是否有任何 全局 设置 EOL 格式而无需手动和单独操作每个 .ftl 的方法?
没有这样的配置选项(截至 2.3.29)。 FreeMarker 仅按原样输出模板的静态文本部分。尽管您不喜欢这种方法,但我相信最好是在传递给 FreeMarker 的 Writer
中执行此操作。在大多数应用程序中,这些开销根本无关紧要。
避免运行时开销的另一个选项是在包装另一个 TemplateLoader
的自定义 TemplateLoader
中做同样的事情。然而,此类解决方案的问题是换行符有时来自模板外部(即来自数据模型),我认为用户也希望这些换行符也被规范化。
因此,即使它是 FreeMarker 的核心功能(我猜它可能是),它也可能会即时执行此操作,就像您可以使用自定义 Writer
.