Ошибка при использовании JSTL XML taglib - атрибут xml не принимает никаких выражений
Вопрос
Я получаю следующую ошибку, когда пытаюсь использовать JSTL XML taglib:
/server-side-transform.jsp(51,0)
According to TLD or attribute directive in tag file,
attribute xml does not accept any expressions
Я изучаю tld и т.д., Но если кто-нибудь знает, что это такое, и может сэкономить мне немного времени, буду признателен!
Если это поможет, я получаю эту ошибку, выполняя пример кода
<c:set var="xml">
<paragraph>
This document uses <bold>unusual</bold> markup,
which we want to replace with <bold>HTML</bold>.
</paragraph>
</c:set>
<c:set var="xsl">
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="paragraph">
<p><xsl:apply-templates/></p>
</xsl:template>
<xsl:template match="bold">
<b><xsl:value-of select="."/></b>
</xsl:template>
</xsl:stylesheet>
</c:set>
<x:transform xml="${xml}" xslt="${xsl}"/>
в моем /server-side-transform.jsp - мои директивы taglib являются:
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/xml" prefix="x" %>
и у меня действительно есть standard.jar и jstl.jar в /WEB-INF/lib.
Решение
Ваш код выдает "неправильную" версию x-1_0.tld, вероятно, из-за проблем с classpath .Например, я вижу в моем текущем пути к классу, что у меня есть одна версия x-1_0.tld, которая ДОПУСКАЕТ выражения времени выполнения ${syntax} в этом теге, и другая, которая этого не делает.Тот, что в standard.jar не допускает выражения EL, в то время как тот, который у меня есть в jetty, допускает.
Другие советы
Я обнаружил, что документация Sun ссылается на URI как
http://java.sun.com/jsp/jstl/xml
Тег теперь вызывается правильно, так что это и стало причиной проблемы;однако я получаю исключение NullPointerException в doEndTag()...хо - хум
Не совсем, вы должны использовать
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
использовать JSTL 1.1.
К сожалению, standard.jar файлы содержат много версий тега *.tld, например.
- c-1_0-rt.tld
- c-1_0.tld
- c.tld
- fmt-1_0-rt.tld
- fmt-1_0.tld
- fmt.дву
- fn.дву
- Разрешенные теги.tld
- свободный от сценариев.tld
- sql-1_0-rt.tld
- sql-1_0.tld
- sql.tld
- x-1_0-rt.tld
- x-1_0.tld
- x.дву
итак, используя
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
вы указываете jsp специально использовать JSTL 1.1, который, кстати, устраняет вышеуказанную проблему, если это не сработает, попробуйте использовать
<%@ page isELIgnored="false" %>
который в основном говорит jsp оценить EL.
/srm
Используйте следующий код:
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
Вместо того , чтобы:
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
Я понимаю, что этот вопрос был задан довольно давно, но я только что столкнулся с той же проблемой.В моем случае пример, которому я следовал, подсказал мне использовать:
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
Когда я должен был использовать:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Я некоторое время смотрел на решение, прежде чем дополнительное jsp в выскочившем у меня uri.
изменение <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core " %> мне не подходит.для моего проекта (версия веб-приложения = "3.0") IDE (MyEclipse) Я вижу файл конфигурации x.tld.Существует значение false для select, которое не допускает появления select ${} или <%=%>.Итак, у меня есть способ обмануть в web.xml.
<jsp-config> <taglib> <taglib-uri>/huang</taglib-uri> <taglib-location>/WEB-INF/x.tld</taglib-location> </taglib> </jsp-config>
добавить к web.xmlобъявите новое имя taglib-url "huang" в моем jsp-файле следующим образом:
<%@ taglib prefix="x" uri="/huang" %>
для использования
<x:out select="$casexml//案例//${node.name }" />
Я могу получить правильный результат