2010-08-11 32 views
16

Tôi có trường Joda-DateTime trong mô hình của mình và muốn hiển thị nó được định dạng trong chế độ xem JSP. Tôi đã chú thích nó với @DateTimeFormat chú thích mới:Cách hiển thị DateTime được định dạng trong Spring MVC 3.0?

public class Customer { 
    private DateTime dateOfBirth; 

    @DateTimeFormat(style="M-") 
    public DateTime getDateOfBirth() { 
     return dateOfBirth; 
    } 
} 

Bây giờ tôi muốn hiển thị DateOfBirth trong JSP của tôi:

Date of birth: ${customer.dateOfBirth} 

Nhưng kết quả là chưa định dạng:

Date of birth: 2010-08-11T11:23:30.148+02:00 

Sau một số nghiên cứu tôi phát hiện ra, rằng tôi phải sử dụng spring: bind-tag:

<spring:bind path="customer.dateOfBirth"> 
    Date of birth: ${status.value} 
</spring:bind> 

Với tính năng này hoạt động. Nhưng nó có vẻ quá phức tạp cho công việc đơn giản này. Và việc sử dụng phương pháp này trong danh sách thậm chí còn phức tạp hơn vì bạn phải tích hợp danh sách chỉ mục vào đường dẫn liên kết.

Vì vậy, câu hỏi của tôi là: Có cách nào đơn giản hơn để hiển thị giá trị được định dạng bằng cách sử dụng chú thích định dạng mùa xuân không?

Trả lời

19

Sử dụng thẻ spring:eval mà hiểu được nguyên tắc @DateTimeFormat:

<spring:eval expression="customer.dateOfBirth" /> 

Ngoài ra, bạn có thể loại bỏ sự cai trị @DateTimeFormat từ mô hình tất cả cùng nhau và sử dụng thẻ formatDate Joda như Naikus minh họa. Trong một bản phát hành tương lai, Spring có kế hoạch hỗ trợ việc cắm "Spel", là "Ngôn ngữ biểu hiện mùa xuân" được gọi bởi spring: eval, như là triển khai thực hiện Unified EL mặc định cho các trang JSP của bạn. Điều này sẽ cho phép các biểu thức nội tuyến như ${customer.dateOfBirth} cũng được định tuyến thông qua Spel. Bạn có thể bỏ phiếu cho yêu cầu nâng cao này tại đây: https://jira.spring.io/browse/SPR-7459.

+0

Mùa xuân: eval hoạt động tốt. Bên cạnh đó tôi upvoted yêu cầu nâng cao để tích hợp Spel trong JSP. Cảm ơn bạn. –

+0

Tôi tìm thấy một vấn đề nhỏ với mùa xuân: eval trong phiên bản 3.0.3. Khi biểu thức đánh giá là null, chuỗi 'null' được in. Ngược lại, spring: bind ví dụ từ câu hỏi của tôi in ra một chuỗi rỗng khi biểu thức đánh giá là null. Có cách nào để ngăn chặn đầu ra của 'null' không? Cảm ơn. –

+0

Bạn có thể mở JIRA tại http://jira.springframework.org để báo cáo vấn đề này không? – kdonald

19

Vì đối tượng ngày giờ của nó là joda và không phải là đối tượng Ngày, bạn sẽ phải viết chức năng định dạng của riêng mình hoặc thẻ tùy chỉnh.

Nếu bạn có thể chuyển đổi nó sang java.util.Date bằng cách nào đó, thì bạn có thể sử dụng thư viện tag fmt của jstl được tạo sẵn.

<fmt:formatDate value="${customer.dateOfBirth}" type="both" 
     pattern="MM-dd-yyyy" /> 

Nhưng jsp mới nhất nhanh chóng cho phép bạn tạo customtags.

+0

liên kết fmt dường như bị hỏng. –

+0

@noobMama bạn cần phải xác định taglib trong trang jsp: <% @ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt"%> –

Các vấn đề liên quan