2011-02-24 66 views
4

我试图获得JodaTime taglib在我的Spring 3 MVC应用程序中工作。获取JodaTime JSP Taglibs的异常工作

根据website我应该能够把这个在我的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" /> 

我不过得到这个异常:

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 

我跑的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链接?

任何接受者?

回答

3

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

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

  1. TLD文件(至少包含它的JAR文件)是不是在classpath的。
  2. TLD文件确实声明了不同的URI。

我没有JodaTime标签的使用经验,所以如果这种(错误的)行为是正确的,我无法从头顶分辨出来。我可以建议的最好是使用一些ZIP工具自己提取包含TLD文件的JAR文件,然后阅读JAR的META-INF文件夹中的.tld文件中的实际<uri>

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


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

+0

感谢您的回答!我检出了TLD文件,结果是一样的。我在NetBeans(IDE)中做了一个清理/构建,并修复了它。我不知道为什么我没有尽早尝试。 =)再次感谢。 至于JSP/Servlet版本的不匹配,我可能应该花时间把事情排好队。这是一个长期的项目,而这正是事情。 – Dave 2011-02-24 18:37:11

+0

不客气。 – BalusC 2011-02-24 18:38:35

+0

如果您使用Maven,只需添加此依赖项 - http://mvnrepository.com/artifact/joda-time/joda-time-jsptags – 2016-03-16 10:37:13