2013-05-29 75 views
9

Làm cách nào để định dạng và hiển thị đối tượng Date trong JSP, tốt nhất là sử dụng JSTL và EL nhưng bất kỳ giải pháp nào khác đều được chào đón? Tôi không thể thay đổi đối tượng đậu.Định dạng ngày và hiển thị nó bằng cách sử dụng JSTL và EL

Tôi có lớp sau đây:

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

Tôi cố gắng để hiển thị ngày trong đối tượng này trong một trang JSP. Khi tôi làm điều này <c:out value="${person.myDate} /> nó in này trong trang. 2013-06-08 00:00:00.0

Điều tôi muốn làm là xóa phần thời gian của ngày và định dạng thành MM-dd-yyyy.

Tôi cố gắng này:

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

và nó đã cho tôi những lỗi sau

Không thể chuyển đổi chuỗi '$ {mydate}' để java.util.Date lớp cho giá trị thuộc tính: java .lang.IllegalArgumentException: Property Editor không được đăng ký với PropertyEditorManager

Sau đó, tôi đã thử các cách sau:

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

và tôi đã nhận:

Unparseable date: "$ {mydate}"

Trả lời

18

Mã của bạn thường phải làm việc. Hãy thử cách này:

<%@ 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} 

Thường không hoạt động nếu bạn có khai báo JSTL sai khớp với phiên bản Servlet/JSP của bạn. Hãy chắc chắn rằng bạn đọc này trước khi thử bất cứ điều gì khác: How to Reference and Use JSTL in your Web Application.

Nếu bạn không biết chính xác môi trường của mình, you can perform some tests to find out the versions mặc dù đơn giản ${1 + 2} được viết trong JSP của bạn phải là một chỉ báo tốt về phiên bản JSP. Nếu bạn thấy 3 trong trình duyệt của mình thì bạn đang sử dụng JSP 2.x, nếu bạn thấy chuỗi ${1 + 2} thay thế thì bạn đang sử dụng JSP 1.x.

+0

Cung cấp cho tôi "Không thể chuyển đổi chuỗi '$ {myDate}' thành lớp java .util.Date " – Susie

+0

Đối với các khai báo JSTL sai, trang của tôi sẽ hiển thị ngày nếu tôi không cố định dạng nó. Có đủ để xác nhận rằng các khai báo jstl khớp với phiên bản servlet/jsp của tôi không? – Susie

+0

Không, thẻ thay đổi ở giữa các phiên bản JSP. Họ sử dụng để có được một chuỗi (EL) và đánh giá nó cho chính họ. Sau đó, trong các phiên bản JSP cao hơn, thùng chứa servlet thực hiện việc đánh giá và sau đó gửi đối tượng tới thẻ nhận loại đối tượng đó chứ không phải một chuỗi để đánh giá. Nếu bạn trộn các thẻ, bạn sẽ nhận được các lỗi lạ. Nếu một thẻ hoạt động thì không có nghĩa là phần còn lại là tốt. – Bogdan

0

Bạn cần phải thêm dòng mã sau đây vào đầu trang của bạn và mã của bạn sẽ hoạt động hoàn hảo. <% @ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt"%>