2015-02-14 4 views
5

Мне не удалось выяснить, как отображать значение java.time.LocalDate в JSP. В моем JSP, у меня есть это:JSTL formatDate и java.time.LocalDate

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

std.datum имеет тип java.time.LocalDate. При рендеринге jsp я получаю это исключение:

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

Я предполагаю, что это конверсия?

Thanks, john.

+1

В соответствии с сообщением 'Can not conv ert 2015-02-14 типа class java.time.LocalDate для класса java.util.Date', тег JSTL '' не поддерживает 'java.time.LocalDate', который представленный на Java 8. – Tiny

+0

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

ответ

5

Да. Вы можете использовать fmt: parseDate для преобразования, а затем выполнить форматирование. Пример ниже

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

Удачи.

1

Это старый вопрос, но я нахожу, что лучше всего сделать пользовательский tld в этом случае: без какого-либо двойного преобразования в и из String.

Сделайте свой собственный tld-файл, затем переопределите класс FormatDate. Наконец, объявите свой собственный пользовательский префикс и используйте custom: formatDate вместо fmt: formatDate.

здесь является упрощенной версией

использование в JSP:

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

WEB-INF/custom.tld файл

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

Затем тег файла класса 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(); 
    } 

} 
Смежные вопросы