Erro usando taglib XML JSTL - atributo xml não aceita quaisquer expressões
Pergunta
Estou recebendo o seguinte erro quando tento usar o taglib XML JSTL:
/server-side-transform.jsp(51,0)
According to TLD or attribute directive in tag file,
attribute xml does not accept any expressions
Eu estou olhando para o tlds etc, mas se alguém sabe o que este é um pode me salvar algum tempo, seria apreciada!
Se ajudar, eu recebo este erro ao executar o código de exemplo
<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}"/>
Na minha /server-side-transform.jsp - minhas diretivas de taglib são:
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/xml" prefix="x" %>
e eu tenho standard.jar e jstl.jar in / WEB-INF / lib.
Solução
Seu código está pegando uma versão "errada" do x-1_0.tld, provavelmente devido a questões de classpath. Vejo, por exemplo, no meu classpath atual, eu tenho uma versão do x-1_0.tld que permite tempo de execução-expressões $ {sintaxe} nesta tag e um que não o faz. A um em standard.jar não permite expressões EL, enquanto que o que eu tenho no cais faz.
Outras dicas
Eu achei que a documentação Sun refere-se ao URI como
http://java.sun.com/jsp/jstl/xml
A tag agora está sendo chamado corretamente, assim que esta foi a causa do problema; porém estou recebendo um NullPointerException em doEndTag () ... hum ho
Não exatamente, você deve usar
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
usar JSTL 1.1.
Infelizmente, os arquivos standard.jar inclui muitas versões de tag * .tld para, por exemplo.
- c-1_0-rt.tld
- c-1_0.tld
- c.tld
- FMT-1_0-rt.tld
- FMT-1_0.tld
- fmt.tld
- fn.tld
- permittedTaglibs.tld
- scriptfree.tld
- sql-1_0-rt.tld
- sql-1_0.tld
- sql.tld
- x-1_0-rt.tld
- x-1_0.tld
- x.tld
isso usando
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
você diz a jsp para especificamente o uso JSTL 1.1 que corrige btw o problema acima, se este não tenta de trabalho usando
<%@ page isELIgnored="false" %>
que basicamente diz jsp para avaliar EL.
/ srm
Use o seguinte código:
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
Em vez de:
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
Eu percebo esta pergunta foi feita há bastante tempo, mas eu só correu para o mesmo problema. No meu caso, o exemplo que eu estava me seguindo direcionado para uso:
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
Quando eu deveria ter vindo a utilizar:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Eu estava olhando para a solução por um tempo antes de o extra de jsp na URI bateu para fora para mim.
mudança <% @ taglib prefix = "c" uri = "http://java.sun.com/jstl/core" %> não é certo para mim. para o meu projeto (versão web-app = "3.0") IDE (MyEclipse) Eu vejo o arquivo de configuração de x.tld.There é a falsa de select, que não permitem a select aparência $ {} ou <% =%>. Então, eu tenho uma maneira de enganar no web.xml.
-
<jsp-config> <taglib> <taglib-uri>/huang</taglib-uri> <taglib-location>/WEB-INF/x.tld</taglib-location> </taglib> </jsp-config>
adicionar ao web.xml -
declarar o novo nome taglib-url "huang" para o meu arquivo jsp como esta:
<%@ taglib prefix="x" uri="/huang" %>
-
para use
<x:out select="$casexml//案例//${node.name }" />
Eu posso obter o resultado correto