使 JodaTime JSP Taglibs 工作的异常

Dav*_*ave 5 jsp jstl spring-mvc jodatime

我正在尝试让 JodaTime taglib 在我的 Spring 3 MVC 应用程序中工作。

根据网站,我应该能够将它放在我的 jsp 页面中,它应该可以工作。

<%@taglib prefix="joda" uri="http://www.joda.org/joda/time/tags" %>
<% pageContext.setAttribute("now", new org.joda.time.DateTime()); %>
<joda:format value="${now}" style="SM" />
Run Code Online (Sandbox Code Playgroud)

但是,我收到此异常:

org.apache.jasper.JasperException: /WEB-INF/jsp/reports/../taglibs.jspf(7,66) PWC6188: The absolute uri: http://www.joda.org/joda/time/tags cannot be resolved in either web.xml or the jar files deployed with this application
Run Code Online (Sandbox Code Playgroud)

我正在运行 Glassfish 3.0.1。Servlet 2.4 版在我的 web.xml 文件中声明。JSP 2.1。JSTL 1.1。

添加:我已将 joda-time-jsptag-1.0.2.jar 添加到我的 WEB-INF/lib 目录中。我在同一个 lib 目录上也有 joda-time-1.6.1.jar。

taglib uri 是否需要有效?当我尝试在浏览器中访问http://www.joda.org/joda/time/tags 时,它会重定向到 sourceforge 页面。也许我只需要一个更新的 URI 链接?

有接班人吗?

Bal*_*usC 4

taglib URI 不一定指向真实的 Web 资源。taglib URI 应与类路径中存在的<uri>任何文件中的声明相匹配。.tld

鉴于这一事实,有两个可能的原因:

  1. TLD 文件(至少是包含它的 JAR 文件)根本不在类路径中。
  2. TLD 文件确实声明了不同的 URI。

我没有使用 JodaTime 标签的经验,所以我无法从头顶判断这种(错误)行为是否正确。我能建议的最好办法是自己使用一些 ZIP 工具提取包含 TLD 文件的 JAR 文件,然后读取JAR 文件夹中文件中的实际内容。 <uri>.tldMETA-INF

如果结果是相同的,那么您可能遇到了类路径或构建设置的问题。JAR 文件是否确实存在于正在运行的 web 应用程序环境中的(扩展的)WAR 文件中?


与具体问题无关,Servlet 2.4 意味着 JSP 2.0,而不是 JSP 2.1。此外,为什么要使用 Servlet 2.4 而不是 2.5 甚至 3.0?Glassfish 3 支持 Servlet 3.0。