Я написал библиотеку тегов Jsp, используя freemarker в качестве шаблона представления.Не удалось получить доступ к вложенным тегам Jsp в Freemarker
custom.tld
размещается в META-INF/tags /.
Мой тег Lib в комплекте как Jar. customTag.jar
. Он имеет следующие шаблоны
AlertTag.ftl
ButtonTag.ftl
AlertTag.ftl
зависит от ButtonTag.ftl
.
AlertTag.ftl
: -
<#assign custom = JspTaglibs["http://www.abc.com/taglibs/custom"]>
<h5>${this.title}</h5>
<div class="alert ${this.typeClass} ${this.classes!}">
<@custom.button btnType="close" <span class="alt">close</span></@custom.button>
</div>
Это customTag.jar является частью другого веб-приложения.
web.xml
: -
<taglib>
<taglib-uri>http://www.abc.com/taglibs/custom</taglib-uri>
<taglib-location>/WEB-INF/custom.tld</taglib-location>
</taglib>
Теперь, когда index.ftl
в веб-приложение пытается использовать тег <@custom.Alert id="abc">
он бросает следующее исключение
Expression JspTaglibs is undefined on line 1, column 17 in freemarker/AlertTag.ftl.
The problematic instruction:
----------
==> assignment: custom=JspTaglibs["http://www.abc.com/taglibs/custom"] [on line 1, column 1 in freemarker/AlertTag.ftl]
----------
Java backtrace for programmers:
----------
freemarker.core.InvalidReferenceException: Expression JspTaglibs is undefined on line 1, column 17 in freemarker/AlertTag.ftl.
Я не могу использовать вложенный JSP тег FreeMarker.
AlertTag.java
Configuration cfg = new Configuration();
cfg.setClassForTemplateLoading(this.getClass(), "/");
Template ftlTemplate = cfg.getTemplate(view);
JspWriter writer = pageContext.getOut();
data.put("id", id)
Map<String, Object> rootMap = new HashMap<String,Object>();
rootMap.put("this", data);
Environment environment = ftlTemplate.createProcessingEnvironment(rootMap, writer);
environment.process();
//ftlTemplate.process(rootMap, writer);
@Daniel, я использовал окружающую среду, как описано выше, но он не работал ни. Правильно ли я использую его?
Как вы вызываете 'AlertTag.ftl' себя? – ddekany
Я вызываю его из index.ftl в веб-приложении. '<@ custom.Alert id =" abc ">' – Mady
Я предполагаю, что @ custom.Alert' является собственным тегом JSP, в отличие от простой макро/директивы FreeMarker. Итак, я имею в виду, как технически будет вызываться «AlertTag.ftl». Поскольку я подозреваю, что тег JSP создаст свой собственный экземпляр ядра FreeMarker, который не имеет ничего общего с тем, что используется для 'index.ftl', и, следовательно, там, где поддерживается поддержка тегов tag. – ddekany