问题标签 [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.

0 投票
0 回答
154 浏览

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_DATAandSettings.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 中做到这一点?

0 投票
0 回答
61 浏览

freemarker - 动态生成项目结构 Freemarker/FMPP

我是 Freemarker 的新手,正在编写一个新软件。在开始任何功能之前,我想根据用户输入(如项目名称、包名称等)动态创建完整的文件夹结构,但我找不到更好的方法来实现这一点。

这是我正在寻找的结构。

我设法使用 Freemarker 生成具有一些动态值的 server-config.xml,但无法理解如何递归处理这些文件夹/文件。还有我应该在哪里维护这个项目结构元数据,以便如果这个结构有任何变化,那么程序应该能够适应这种变化并动态生成这些基本文件/文件夹。

提前致谢。

0 投票
1 回答
26 浏览

json - 如何在 FreeMarker 中序列化()一个 fmpp CsvSequence?

我尝试同时使用flexjson.JSONSerializercom.fasterxml.jackson.databind.ObjectMapper在 freemarker 模板中将通过 csv 数据加载器加载的 csv 文件转换csv(menu.csv, {trimCells: true})为 JSON。

当我尝试运行它时,出现以下异常:

我还不知道 FreeMarker 的任何内部结构,但在我看来,这CsvSequence确实实现了freemarker.template.TemplateHashModel但不是freemarker.template.TemplateHashModelEx.

我发现的唯一地方getModelEx是在 HashAdaptor 中,所以我假设它使用较新的接口进行哈希。

知道如何解决这个问题吗?