使用JSTL XML taglib时出错 - 属性xml不接受任何表达式

时间:2008-12-18 10:55:42

标签: xml jstl xslt el taglib

当我尝试使用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

我正在调查tlds等,但如果有人知道这是什么可以节省我一些时间,我们将不胜感激!

如果有帮助,我会在运行示例代码时出现此错误

<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" %>

我在/ WEB-INF / lib中有standard.jar和jstl.jar。

6 个答案:

答案 0 :(得分:2)

您的代码正在拾取x-1_0.tld的“不正确”版本,可能是由于类路径问题。我在我当前的类路径中看到,例如,我有一个版本的x-1_0.tld,在此标记中允许运行时表达式$ {syntax},而不是。 standard.jar中的那个不允许EL表达式,而我在jetty中的那个表达式。

答案 1 :(得分:2)

我发现Sun文档将URI称为

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

现在正在正确调用标记,因此这就是问题的原因;但是我在doEndTag()中得到一个NullPointerException ...哼哼

答案 2 :(得分:2)

不完全是,你应该使用

<%@ 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.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

所以使用

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

你告诉jsp专门使用JSTL 1.1哪个btw修复了上面的问题,如果这不起作用尝试使用

<%@ page isELIgnored="false" %>

基本上告诉jsp评估EL。

/ SRM

答案 3 :(得分:1)

使用以下代码:

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

而不是:

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

答案 4 :(得分:0)

我意识到这个问题很久以前就被问过,但我遇到了同样的问题。就我而言,我跟随的例子指示我使用:

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

当我应该使用时:

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

在uri弹出的额外 jsp 之前,我正盯着解决方案一段时间。

答案 5 :(得分:0)

更改&lt;%@ taglib prefix =“c”uri =“http://java.sun.com/jstl/core”%&gt;不适合我。 对于我的项目(web-app version =“3.0”)IDE(MyEclipse) 我看到了x.tld的配置文件。选择的false是不允许选择外观$ {}或&lt;%=%&gt;。所以我有一种方法可以在web.xml中作弊。

  1. <jsp-config> <taglib> <taglib-uri>/huang</taglib-uri> <taglib-location>/WEB-INF/x.tld</taglib-location> </taglib> </jsp-config>添加到web.xml

  2. 将新的taglib-url名称“huang”声明为我的jsp文件,如下所示:

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

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

    我可以得到正确的结果