找不到 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 也不会给你“真正的”文件路径,所以你必须正确地做事。也就是说,只需使用ClassTemplateLoader
或WebappTemplateLoader
而不是FileTemplateLoader
。
另外,如果您无论如何都在升级 FreeMarker,没有理由在 2.3.21 之前停止(我写这篇文章时是最新的 2.3.x)。其中,它将用于查找模板的TemplateLoader
-s 放入错误消息中。这现在会很有帮助。
【讨论】:
非常感谢您的详细回复。我第一次尝试使用站点“***.com/questions/14956396/…”上的说明替换“TemplateLoader”,但没有成功。出于某种原因,似乎 spring 没有加载我的自定义 bean。我将在接下来的几天内再次尝试,并尽快在此处发布结果。再次感谢和最好的问候。以上是关于找不到 freemarker div-close.ftl 升级到 JBoss 7的主要内容,如果未能解决你的问题,请参考以下文章
StrutsSpringJUnit4TestCase freemarker 结果“找不到名称的模板”
freemarker模板加载TemplateLoader常见方式