Error using JSTL XML taglib - attribute xml does n

2020-04-24 16:03发布

I'm getting the following error when I try to use the 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

I'm looking into the tlds etc, but if anyone knows what this is an can save me some time, it'd be appreciated!

If it helps, I get this error running the example code

<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}"/>

in my /server-side-transform.jsp - my taglib directives are:

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/xml" prefix="x" %>

and I do have standard.jar and jstl.jar in /WEB-INF/lib.

6条回答
在下西门庆
2楼-- · 2020-04-24 16:39

Use the following code:

<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %> 

Instead of:

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
查看更多
倾城 Initia
3楼-- · 2020-04-24 16:39

I realize this question was asked quite a while ago but I just ran into the same problem. In my case, the example I was following directed me to use:

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

When I should have been using:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

I was staring at the solution for a while before the extra jsp in the uri popped out at me.

查看更多
叛逆
4楼-- · 2020-04-24 16:42

Not exactly, you should use

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

to use JSTL 1.1.

Unfortunately the standard.jar files includes many versions of *.tld tag for eg.

  • 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

so by using

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

you tell the jsp to specifically use JSTL 1.1 which btw fixes the above issue, if this does not work try using

<%@ page isELIgnored="false" %>

which basically tells jsp to evaluate EL.

/srm

查看更多
我只想做你的唯一
5楼-- · 2020-04-24 16:48

change <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> is not right for me. for my project(web-app version="3.0" ) IDE(MyEclipse) I see the configuration file of x.tld.There is the false of select which do not allow the select apperance ${} or <%=%>.So I got a way to cheat in the web.xml.

  1. <jsp-config> <taglib> <taglib-uri>/huang</taglib-uri> <taglib-location>/WEB-INF/x.tld</taglib-location> </taglib> </jsp-config> add to web.xml

  2. declare the new taglib-url name "huang" to my jsp file like this:

    <%@ taglib prefix="x" uri="/huang" %>

  3. to use<x:out select="$casexml//案例//${node.name }" />

    I can get the right result

查看更多
干净又极端
6楼-- · 2020-04-24 16:57

I found that the Sun documentation refers to the URI as

http://java.sun.com/jsp/jstl/xml

The tag is now being called correctly, so this was the cause of the problem; however I am getting a NullPointerException in doEndTag()... ho hum

查看更多
Luminary・发光体
7楼-- · 2020-04-24 16:59

Your code is picking up an "incorrect" version of x-1_0.tld, probably due to classpath issues. I see for instance on my current classpath, I have one version of x-1_0.tld that ALLOWS runtime-expressions ${syntax} in this tag and one that does not. The one in standard.jar does not allow EL expressions, while the one I have in jetty does.

查看更多
登录 后发表回答