2015-02-14 18 views
5

Tôi chưa thể tìm ra cách hiển thị giá trị java.time.LocalDate trong JSP. Trong JSP của tôi, tôi có điều này:JSTL formatDate và java.time.LocalDate

<fmt:formatDate value="${std.datum}" type="date" pattern="dd.MM.yyyy" var="stdDatum" /> 

std.datum thuộc loại java.time.LocalDate. Khi kết xuất jsp, tôi nhận ngoại lệ này:

javax.el.ELException: Cannot convert 2015-02-14 of type class java.time.LocalDate to class java.util.Date 

Tôi cho rằng đó là chuyển đổi?

Xin cảm ơn, john.

+1

Theo thông báo 'Không thể chuyển đổi ert 2015-02-14 của lớp java.time.LocalDate vào lớp java.util.Date', thẻ JSTL '' không hỗ trợ 'java.time.LocalDate' được giới thiệu trong Java 8. – Tiny

+0

http://www.tech.theplayhub.com/jstl_formatdate_and_java-time-localdate/ –

Trả lời

5

Có. Bạn có thể sử dụng fmt: parseDate để thực hiện chuyển đổi và sau đó thực hiện định dạng. Ví dụ dưới đây

<fmt:parseDate value="${std.datum}" pattern="yyyy-MM-dd" 
          var="parsedDate" type="date" /> 

<fmt:formatDate value="${parsedDate}" var="stdDatum" 
          type="date" pattern="dd.MM.yyyy" /> 

Chúc may mắn.

1

Đây là một câu hỏi cũ, nhưng tôi tìm thấy nó là rất tốt nhất để làm một tld tùy chỉnh trong trường hợp này: mà không có bất kỳ chuyển đổi kép đến và đi từ chuỗi.

Làm tệp tld của riêng bạn, sau đó ghi đè lên lớp FormatDate. Cuối cùng, khai báo tiền tố tùy chỉnh của riêng bạn và sử dụng tùy chỉnh: formatDate thay vì fmt: formatDate.

đây là một phiên bản đơn giản

sử dụng trong JSP:

<%@ taglib uri="/WEB-INF/custom" prefix="custom" %> 
... 
<custom:formatDate value="${std.datum}" pattern="dd/MM/yyyy" /> 

WEB-INF/custom.tld tập tin

<?xml version="1.0" encoding="UTF-8"?> 
<tag ib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"> 

<tag> 
    <description> 
     FormatDate with java8 type 
    </description> 
    <name>formatDate</name> 
    <tag-class>com.custom.tag.FormatDateTag</tag-class> 
    <body-content>empty</body-content> 
    <attribute> 
     <description> 
      Date and/or time to be formatted. 
     </description> 
     <name>value</name> 
     <required>true</required> 
     <rtexprvalue>true</rtexprvalue> 
    </attribute> 

    <attribute> 
     <description> 
      Custom formatting style for dates and times. 
     </description> 
     <name>pattern</name> 
     <required>false</required> 
     <rtexprvalue>true</rtexprvalue> 
    </attribute> 
</tag> 
</taglib> 

Sau đó tag file class java

public class FormatDateTag extends TagSupport { 

    protected Temporal value; 
    protected String pattern; 
    private String var; 
    private int scope; 


    public FormatDateTag() 
    { 
     super(); 
     init(); 
    } 

    private void init() 
    { 

     this.pattern = this.var = null; 
     this.value = null; 
     this.scope = PageContext.PAGE_SCOPE; 
    } 


    public void setVar(final String var) 
    { 
     this.var = var; 
    } 

    public void setScope(final String scope) 
    { 
     this.scope = Util.getScope (scope); 
    } 


    public void setValue(final Temporal value) 
    { 
     this.value = value; 
    } 


    public void setPattern(final String pattern) 
    { 
     this.pattern = pattern; 
    } 


    @Override 
    public int doEndTag() throws JspException 
    { 

     String formatted = null; 

     if (this.value == null) 
     { 
      if (this.var != null) 
      { 
       this.pageContext.removeAttribute (this.var, this.scope); 
      } 
      return EVAL_PAGE; 
     } 

     // Create formatter 
     if (this.pattern != null) 
     { 
      final DateTimeFormatter formatter = DateTimeFormatter.ofPattern (this.pattern); 
      formatted = formatter.format (this.value); 
     } 
     else 
     { 
      // no formatting locale available, use Date.toString() 
      formatted = this.value.toString(); 
     } 

     if (this.var != null) 
     { 
      this.pageContext.setAttribute (this.var, formatted, this.scope); 
     } 
     else 
     { 
      try 
      { 
       this.pageContext.getOut().print (formatted); 
      } 
      catch (final IOException ioe) 
      { 
       throw new JspTagException (ioe.toString(), ioe); 
      } 
     } 

     return EVAL_PAGE; 
    } 


    @Override 
    public void release() 
    { 
     init(); 
    } 

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