【发布时间】:2017-12-01 11:50:31
【问题描述】:
我正在将我的 Liferay portlet 从 6.0 迁移到 Liferay 7.0,我遇到的许多障碍之一是包含我的自定义标记库。
我遵循了来自:Creating a custom taglib in Liferay 7 的建议,但我的 portlet 无法加载 taglib,记录了以下错误:
09:50:48,566 ERROR [http-nio-8080-exec-10][FreeMarkerManager:208] Unable to add taglib my_tags to context
FreeMarker template error:
freemarker.template.TemplateModelException: Error while loading tag library for URI "/META-INF/my_tags.tld" from TLD location "servletContext:/META-INF/my_tags.tld"; see cause exception.
at freemarker.ext.jsp.TaglibFactory.get(TaglibFactory.java:260)
at com.liferay.portal.template.freemarker.internal.FreeMarkerManager$TaglibFactoryWrapper.get(FreeMarkerManager.java:647)
at com.liferay.portal.template.freemarker.internal.FreeMarkerManager.addTaglibSupport(FreeMarkerManager.java:205)
at com.liferay.taglib.util.ThemeUtil.doIncludeFTL(ThemeUtil.java:276)
at com.liferay.taglib.util.ThemeUtil.doDispatch(ThemeUtil.java:157)
at com.liferay.taglib.util.ThemeUtil.includeFTL(ThemeUtil.java:100)
at com.liferay.taglib.util.ThemeUtil.include(ThemeUtil.java:82)
但是,我的包 JAR确实包含 META-INF/my_tags.tld
让我印象深刻的是,当我的 JSP 被加载但在主题的 FreeMarker 模板中的某个地方时,错误不会发生。显然那时我的 JSP 甚至还没有加载。
在我的门户中的 每个 页面上都会引发错误,而不仅仅是那些包含我的 portlet 的页面(如果主题已经无法访问 taglib,这是可以预期的)
bundle JAR的结构是:
com/
content/
META-INF/
+--- resources/
MANIFEST.MF
taglib-mappings.properties
my_tags.tld
OSGI-INF/
WEB-INF/
bnd 任务生成的 MANIFEST.MF 包含以下依赖:
Require-Capability: osgi.extender;osgi.extender="jsp.taglib";uri="/META-INF/my_tags.tld"
文件taglib-mappings.properties 包含:
my_tags=/META-INF/my_tags.tld
我还尝试将 .tld 文件放入 WEB-INF/tld 中,以使用普通、简单、标准的 portlet 或 Web 应用程序,但也无济于事。
我是否需要在web.xml 中添加映射(我不确定新的 OSGi portlet 是否甚至使用 web.xml)或添加一些其他配置选项?
【问题讨论】:
标签: jsp osgi portlet taglib liferay-7