找不到 freemarker div-close.ftl 升级到 JBoss 7

Posted

技术标签:

【中文标题】找不到 freemarker div-close.ftl 升级到 JBoss 7【英文标题】:freemarker div-close.ftl not found upgrading to JBoss 7 【发布时间】:2015-01-21 14:13:37 【问题描述】:

我需要将在 Jboss 4.2.3 上运行良好的“.war”应用程序迁移到更新版本的 JBoss。 我选择了“jboss-as-7.1.1.Final”。

经过一些小的调整后,我可以加载应用程序,但第一次访问登录页面返回了关于缺少文件“div-close.ftl”的 freemarker 配置错误。 我发现了一个名为“freemarker”的文件夹,其中包含带有模板的内部文件夹:“ajax”、“simple”、“xhtml”和“whtml”。 缺少的“div-close.ftl”实际上不存在于“xhtml”文件夹(这是默认的 ui 模板)上,但我认为这适用于较旧的 JBoss 可能是因为当给定文件时回退到“简单”文件是不存在于特定且更详细的 ui 模板文件夹中(如果我错了,请纠正我)。

我需要做的唯一依赖项更改是将 struts 依赖项从版本 2.2.1 升级到 2.3.1。 随后,freemarker 依赖从 2.3.16 升级到 2.3.18。

为了解决问题,我配置了旧版本 2.3.16,但没有运气,所以我尝试将丢失的文件从“simple”文件夹复制到“xhtml”,这个问题停止了,但我得到了浏览应用程序时出现相同类型的错误,但抱怨现在在“whtml”文件夹中找不到模板文件。

事情似乎有点乱,我不知道从哪里开始挖掘。这是一个freemarker问题吗?是struts的问题吗?

有没有人遇到过同样的问题,或者可以帮帮我吗?

【问题讨论】:

【参考方案1】:

freemareker.template.Configuration 对象中有一个templateLoader JavaBean 属性(getTemplateLoader/setTemplateLoader 方法对)。 TemplateLoader 对象指定如何找到和加载模板。你肯定有一个MultiTemplateLoader,它调用其他TemplateLoader-s 的列表来实现回退行为。显然,其中一些代表TemplateLoader-s 坏了。通常的错误是获取模板目录的文件路径(“真实路径”),然后从中创建FileTemplateLoader。问题在于ServletContext 资源和ClassLoader 资源都不能保证作为真实文件存在。据我所见,在 JBoss AS 7 上它们确实不是。即使war 被提取出来,JBoss 也不会给你“真正的”文件路径,所以你必须正确地做事。也就是说,只需使用ClassTemplateLoaderWebappTemplateLoader 而不是FileTemplateLoader

另外,如果您无论如何都在升级 FreeMarker,没有理由在 2.3.21 之前停止(我写这篇文章时是最新的 2.3.x)。其中,它将用于查找模板的TemplateLoader-s 放入错误消息中。这现在会很有帮助。

【讨论】:

非常感谢您的详细回复。我第一次尝试使用站点“***.com/questions/14956396/…”上的说明替换“TemplateLoader”,但没有成功。出于某种原因,似乎 spring 没有加载我的自定义 bean。我将在接下来的几天内再次尝试,并尽快在此处发布结果。再次感谢和最好的问候。

以上是关于找不到 freemarker div-close.ftl 升级到 JBoss 7的主要内容,如果未能解决你的问题,请参考以下文章

Spring Freemarker 配置,找不到模板

StrutsSpringJUnit4TestCase freemarker 结果“找不到名称的模板”

未找到 Freemarker 模板

freemarker模板加载TemplateLoader常见方式

freemarker报 java.io.FileNotFoundException:及TemplateLoader使用

freemarker怎么判断double为空