问题标签 [fmpp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何使用 FMPP Java API 动态加载数据?
我正在将 FMPP 转换集成到我们的 Java 代码库中。为此,我使用FMPP Java API。出于实际原因,我有两个单独的目录:
- 一个包含模板:
<absolute path template>/template.ftlx
- 一个包含数据:
<absolute path data>/data.xml
这在某种程度上使事情复杂化,因为我必须在这里使用绝对路径。通常,数据位于模板目录中(连同一个ignoredir.fmpp
文件)。但是,在我们的应用程序中,数据来自外部源(可通过 REST API 上传),而模板位于类路径中。这也意味着数据目录不是静态的。
我正在努力定义所有这些并通过 Java API 进行转换。目前,我有以下内容:
上面的代码片段不完整,因为我必须添加数据。有Settings.NAME_DATA
andSettings.NAME_DATA_ROOT
属性,但我无法让它工作。我尝试设置Settings.NAME_DATA_ROOT
如下:
然后,我得到 FreeMarker 找不到我的数据的异常:
在模板中,我只是这样做:
这是有道理的,这是行不通的,因为我没有在任何地方定义数据应该可以通过d.
散列访问(我在下面做的config.fmpp
)。但我不知道如何通过Settings.NAME_DATA
和/或正确定义它Settings.NAME_DATA_ROOT
。
如何将我的数据文件注入所有这些?它应该得到 key d
,所以我可以d.
在模板中参考。
参考
作为参考,如果我在中创建以下config.fmpp
文件<absolute path config>
,将data.xml
数据文件放在目录中<absolute path data>
并在上面调用s.load(new File("<absolute path config>/config.fmpp"))
之前s.execute()
,一切正常。
我所要做的就是通过 Java API 以动态方式执行此操作。我不能用config.fmpp
这个,因为数据的位置不是静态的(据我所知,config.fmpp
不是可参数化的)。
工作解决方案,有疑问
经过一些代码阅读后,如果我执行以下操作,我就可以正常工作:
在这里,我们{configuration:xml(<absolute path output>/data.xml)}
作为 TDD 传递给NAME_DATA
属性。这是要走的路吗?在我们的代码中构造文本定义“感觉”很奇怪。有没有办法在纯 Java 中做到这一点?
freemarker - 动态生成项目结构 Freemarker/FMPP
我是 Freemarker 的新手,正在编写一个新软件。在开始任何功能之前,我想根据用户输入(如项目名称、包名称等)动态创建完整的文件夹结构,但我找不到更好的方法来实现这一点。
这是我正在寻找的结构。
我设法使用 Freemarker 生成具有一些动态值的 server-config.xml,但无法理解如何递归处理这些文件夹/文件。还有我应该在哪里维护这个项目结构元数据,以便如果这个结构有任何变化,那么程序应该能够适应这种变化并动态生成这些基本文件/文件夹。
提前致谢。
json - 如何在 FreeMarker 中序列化()一个 fmpp CsvSequence?
我尝试同时使用flexjson.JSONSerializer
和com.fasterxml.jackson.databind.ObjectMapper
在 freemarker 模板中将通过 csv 数据加载器加载的 csv 文件转换csv(menu.csv, {trimCells: true})
为 JSON。
当我尝试运行它时,出现以下异常:
我还不知道 FreeMarker 的任何内部结构,但在我看来,这CsvSequence
确实实现了freemarker.template.TemplateHashModel
但不是freemarker.template.TemplateHashModelEx
.
我发现的唯一地方getModelEx
是在 HashAdaptor 中,所以我假设它使用较新的接口进行哈希。
知道如何解决这个问题吗?