我在modules/portal/web/WEB-INF/templates/email/(我创建的子文件夹(下有email.ftl
。在我的控制器代码中,我有我的 EmailInfo 声明,我想指定 email.ftl 的路径。
查看本教程,我看到 EmailInfo 声明是这样的:
EmailInfo emailInfo = new EmailInfo(
"john.doe@company.com,jane.roe@company.com",
newsItem.getCaption(),
null,
"com/company/demo/templates/news_item.txt",
Collections.singletonMap("newsItem", newsItem)
);
我注意到通向news_item.txt的相对路径从com/
开始,这让我相信路径的根是从控制器所在模块的"src"文件夹开始的(我的控制器在应用程序门户中,所以在我的情况下,portal/src
(。由于我的模板在web/
而不是src/
下,我指定了我的路径:
EmailInfo emailInfo = new EmailInfo("email@email.com", "Email Template", null, "../web/WEB-INF/templates/email/email.ftl", null, null);[/pre]
但是,它不起作用,因为抛出了一个错误:
java.lang.IllegalArgumentException: 无法按路径找到模板: ../web/WEB-INF/templates/email/email.ftl
所以我的问题是,如何指定此文件路径以转到不同的子文件夹下,特别是"模块/门户/网络"?
谢谢,明格尔
==X-发布自CUBA平台论坛==
感谢 CUBA-Platform 上的 Yuriy Artamonov 回答:
不幸的是,您无法将电子邮件模板存储在门户/Web 模块中,因为它们是在中间件上处理的。我建议你把它们放到核心模块src文件夹中。实际上,"/"表示类路径根目录,而不是文件夹。
模板由电子邮件使用加载资源接口加载 使用以下规则:https://doc.cuba-platform.com/manual-6.5/resources.html
我把email.ftl
放在modules/core/src/com/example/test/email/email.ftl
下,并指定了/com/example/test/email/email.ftl
的路径,它奏效了。