【问题标题】:Format Date with fmt:formatDate JSP使用 fmt:formatDate JSP 格式化日期
【发布时间】:2010-09-21 20:04:06
【问题描述】:

我正在尝试使用以下格式设置日期:

<fmt:formatDate value="${newsletter.createdOn}" pattern="MM/dd/yyyy"/>

newsletter 是一个具有createdOn 属性的对象,即java.util.Date。

当我调用上一句时,我得到:

根据 TLD,属性值不接受表达式。

我正在用

导入 fmt
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>

有谁知道我该如何解决这个问题?

我正在使用tomcat附带的jstl.jar。

在 jstl.jar/META-INF/MANIFEST.MF 下停留:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.5.3 
Created-By: 1.4.2-b28 (Sun Microsystems Inc.)
Specification-Title: JavaServer Pages Standard Tag Library (JSTL)
Specification-Version: 1.1
Implementation-Title: JavaServer Pages Standard Tag Library API Refere
 nce Implementation
Implementation-Version: 1.1.0-D13
Implementation-Vendor: Sun Microsystems, Inc.
Implementation-Vendor-Id: com.sun
Extension-Name: javax.servlet.jsp.jstl

我使用的是 Apache Tomcat 版本 6.0.14

【问题讨论】:

  • 将日期格式化为“MM/dd/yyyy”是邪恶的 :) 请改用 MMM dd yyyy,其中 MMM 是月份的名称。否则,2009 年 1 月 6 日的日期会让您的潜在读者认为它是在 6 月 1 日发布的。
  • 你知道你运行的是什么版本的Tomcat吗?
  • 好吧,我很困惑。您是否进行了干净的构建、关闭、删除了 %TOMCAT_HOME%\work、重新启动并重新部署以确保没有任何问题?
  • 干净的构建、关闭、删除 %TOMCAT_HOME%\work、重新启动和重新部署没有帮助。
  • 你没有切换回 1.0 声明,是吗?

标签: jsp jstl


【解决方案1】:

试试

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

【讨论】:

  • 区别在于uri的.../jsp/...部分。
【解决方案2】:

This guy 似乎解决了这个问题,方法是从 jar 中提取 TLD,对其进行修改,将其放在 WAR 的 WEB-INF 目录中,然后在他的web.xml 中添加一个条目,如下所示:

<jsp-config>
 <taglib>
  <taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>
  <taglib-location>/WEB-INF/fmt.tld</taglib-location>
 </taglib>
</jsp-config>

最后,他切换到1.1声明:

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

【讨论】:

  • 其实只要修复 taglib URI 就足够了。与松散的 TLD 纠缠是一个很大的神话,真的不应该这样做。
  • “此人”链接已损坏
【解决方案3】:

我遇到了同样的问题。

我变了 fmt" %> 到 fmt_rt" %> 它对我有用!

【讨论】:

    【解决方案4】:

    您使用的是 JSTL 1.0 还是 1.1? 1.1 中的 formatDate 应该接受表达式。

    【讨论】:

      【解决方案5】:

      您确定您没有使用标签库的运行时版本吗?我们可以看看库导入语句吗?

      我认为lucus 正在做某事,根据JavaRanch 上的FAQ,这是一个JSTL 1.0 声明。您可能想要更新到 1.1。

      您的环境、应用服务器和版本是什么?

      【讨论】:

      • 你知道你用的是什么版本吗?
      【解决方案6】:

      显然,我需要 1.1,但我必须更改 c 和 fmt 的库导入语句。
      现在它起作用了。感谢您的帮助,并为造成的混乱感到抱歉。

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

      【讨论】:

        【解决方案7】:

        它只是通过将“_rt”添加到 taglib url 来为我工作,如下所示:

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

        我在this article找到它

        玩得开心!

        【讨论】:

        • 你有一个过时的 JSTL 版本(那篇文章也很旧)。升级 JSTL。阅读our JSTL wiki page。
        【解决方案8】:

        您使用的是fmt-1_0-rt.tld 还是fmt-1_0.tld 标签库。

        区别在于rtexprvalue的设置

        一个是假的,另一个是真的。

        【讨论】:

        • 不知道,我怎么知道。我正在使用定义此标签的 jstl.jar。
        【解决方案9】:
        <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix='fmt'%>
        

        为我工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-03
          • 2016-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多