1

当我尝试使用 JSTL XML 标签库时出现以下错误:

/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。

4

6 回答 6

2

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

于 2008-12-18T11:21:10.030 回答
2

我发现 Sun 文档将 URI 称为

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

该标签现在被正确调用,所以这是问题的原因;但是我在 doEndTag() 中收到 NullPointerException ......呵呵

于 2008-12-18T11:23:59.167 回答
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
  • 域名
  • fmt-1_0-rt.tld
  • fmt-1_0.tld
  • fmt.tld
  • 域名
  • allowedTaglibs.tld
  • scriptfree.tld
  • sql-1_0-rt.tld
  • sql-1_0.tld
  • sql.tld
  • x-1_0-rt.tld
  • x-1_0.tld
  • 域名

所以通过使用

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

您告诉 jsp 专门使用 JSTL 1.1,顺便说一句,它修复了上述问题,如果这不起作用,请尝试使用

<%@ page isELIgnored="false" %>

这基本上告诉 jsp 评估 EL。

/srm

于 2010-08-05T20:37:30.213 回答
1

使用以下代码:

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

代替:

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
于 2011-04-15T11:26:14.140 回答
0

我意识到这个问题是很久以前提出的,但我遇到了同样的问题。就我而言,我遵循的示例指示我使用:

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

当我应该使用时:

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

在 uri 中的额外jsp突然出现在我面前之前,我盯着解决方案看了一会儿。

于 2012-04-17T11:17:09.047 回答
0

更改 <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 不适合我。对于我的项目(web-app version="3.0")IDE(MyEclipse),我看到了 x.tld 的配置文件。选择的错误是不允许选择外观 ${} 或 <%=%>。所以我有办法在 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. 向我的 jsp 文件声明新的 taglib-url 名称“huang”,如下所示:

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

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

    我可以得到正确的结果

于 2014-11-05T12:47:46.930 回答