2015-02-14 17 views
5

Ich konnte nicht herausfinden, wie ein java.time.LocalDate Wert in einer JSP angezeigt wird. In meinem JSP, ich habe dies:JSTL formatDate und java.time.LocalDate

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

std.datum ist vom Typ java.time.LocalDate. Beim Rendern der JSP bekomme ich diese Ausnahme:

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

Ich nehme an, es ist die Konvertierung?

Danke, John.

+1

Laut der Meldung 'Kann nicht Conv 14.02.2015 vom Typ class java.time.LocalDate in die Klasse java.util.Date', das JSTL-Tag '' unterstützt 'java.time.LocalDate' nicht eingeführt in Java 8. – Tiny

+0

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

Antwort

5

Ja. Sie könnten fmt: parseDate verwenden, um die Konvertierung durchzuführen, und dann die Formatierung vornehmen. Beispiel unten

<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" /> 

Viel Glück.

1

Dies ist eine alte Frage, aber ich finde es am besten, in diesem Fall ein benutzerdefiniertes tld zu machen: ohne doppelte Konvertierung von und nach String.

Tun Sie Ihre eigene Tld-Datei und überschreiben Sie dann die FormatDate-Klasse. Schließlich deklarieren Sie Ihr eigenes benutzerdefiniertes Präfix und verwenden Sie custom: formatDate anstelle von fmt: formatDate.

hier ist eine vereinfachte Version

Verwendung in JSP:

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

WEB-INF/custom.tld Datei

<?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> 

die Java-Klasse-Tag-Datei

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(); 
    } 

} 
Dann