JSTL XML-преобразования не работают с вложенными XSL-включениями - PullRequest
0 голосов
/ 06 июня 2010

У меня есть немного JSP, который делает это:

<c:import url="/xsl/Transformer.xsl" var="xslt" />
<x:transform doc="${actionBean.dom}" xslt="${xslt}" xsltSystemId="/xsl/">

Это преобразует XML в точности так, как ожидается, если Transformer.xsl не содержит тегов <xsl:include> или если какие-либо документы, которые он включает, не содержат ничего.

Однако, если я использую XSL, который включает в себя документ, который, в свою очередь, включает в себя другой документ, я получаю следующую ошибку:

ERROR:  'Invalid URI 'NestedInclude.xsl
Could not resolve entity reference: "NestedInclude.xsl"'.'

Обратите внимание, что JSP содержится в каталоге под документами xsl. Если все мои XSL и JSP находятся в одном каталоге (и я удаляю атрибут xsltSystemId), тогда все будет работать нормально, но я не хочу этого делать.

Может кто-нибудь увидеть что-то, что я делаю не так, потому что на данный момент это немного убийственно, а документация JSTL практически бесполезна.

Ответы [ 2 ]

1 голос
/ 27 ноября 2018

У меня была та же проблема, и я мог решить ее, указав абсолютный путь. как то так:

<c:import url="/WEB-INF/some-folders/xsl/Transformer.xsl"/>
1 голос
/ 04 августа 2010

Если вы укажете значение для атрибута xsltSystemId, начинающегося с "/", я думаю, JSTL будет использовать EntityResolver, который пытается найти: PageContext.getServletContext().getResourceAsStream(xsltSystemId). Итак, вы можете попробовать либо xsltSystemId="/xsl/Transformer.xsl", либо просто пропустить атрибут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...