2013-05-29 28 views
9

如何在JSP中格式化和显示Date对象,最好使用JSTL和EL,但是欢迎使用任何其他解决方案?我无法更改该bean对象。格式化日期并使用JSTL和EL显示它

我有下面的类:

import java.util.Date; 
public class Person { 
    private Date myDate; 
    public Date getMyDate() { 
     return myDate; 
    } 
    public void setMyDate(Date myDate){ 
     this.myDate = myDate; 
    } 
} 

我想显示在JSP页面中此对象的日期。当我这样做<c:out value="${person.myDate} />它打印在页面中。 2013-06-08 00:00:00.0

我想要做的是删除日期的时间部分并将其格式化为MM-dd-yyyy

我尝试这样做:

<c:set var="myDate" value="${person.myDate }"/> 
<fmt:formatDate value="${myDate}" type="date" var="formattedDate"/> 

,它给了我下面的错误

无法转换字符串 '$ {}指明MyDate' 类java.util.Date的属性值:JAVA .lang.IllegalArgumentException:属性编辑器未注册PropertyEditorManager

然后我尝试了以下操作:

<c:set var="myDate" value="${person.myDate }"/> 
<fmt:parseDate value="${myDate }" var="parsedDate" pattern="MM-dd-yyyy"/> 
<c:out value="${parsedDate }"/> 

和我:

无法解析的日期: “$ {}指明MyDate”

回答

18

您的代码应该正常工作。尝试像这样:

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

<fmt:formatDate value="${person.myDate}" var="formattedDate" 
       type="date" pattern="MM-dd-yyyy" /> 
${formattedDate} 

如果您的JSTL声明错误以符合您的Servlet/JSP版本,它通常不起作用。请确保您在尝试其他任何操作之前阅读此内容:How to Reference and Use JSTL in your Web Application

如果您不确切知道您的环境,you can perform some tests to find out the versions尽管编写在JSP中的简单${1 + 2}应该是JSP版本的一个很好的指示器。如果您在浏览器中看到3,那么您使用的是JSP 2.x,如果您看到字符串${1 + 2},那么您将使用JSP 1.x.

+0

给我“无法将字符串'$ {myDate}'转换为类java .util.Date“ – Susie

+0

至于错误的JSTL声明,如果我不尝试格式化它,我的页面会显示日期。这足以确认jstl声明与我的servlet/jsp版本匹配吗? – Susie

+0

不,标签在JSP版本之间更改。他们曾经得到一个字符串(EL)并为自己评估。然后,在更高版本的JSP版本中,servlet容器执行评估,然后将对象发送到接收该类型对象的标签,而不是要评估的字符串。如果你混合使用标签,你会得到奇怪的错误。如果一个标签有效,这并不意味着其余的都可以。 – Bogdan

0

您需要将以下代码行添加到页面的头部,并且您的代码将完美工作。 <%@ taglib prefix =“fmt”uri =“http://java.sun.com/jsp/jstl/fmt”%>