2016-02-24 35 views
5

Desidero formattare il mio oggetto java 8 LocalDateTime nel modello "dd.MM.yyyy". C'è una libreria da formattare? Ho provato il codice qui sotto ma ho ottenuto un'eccezione di conversione.Formato JSTL LocalDateTime

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

C'è qualche tag o convertitore per la classe LocalDateTime in JSTL?

+1

Vedere anche: https://github.com/sargue/java-time-jsptags –

risposta

6

In realtà ho avuto lo stesso problema e ho finito per biforcare i tag jsp Time Joda Time per creare Java 8 java.time JSP tags.

Con quella libreria il tuo esempio potrebbe essere qualcosa di simile:

<javatime:parseLocalDateTime value="${date}" pattern="yyyy-MM-dd" var="parsedDate" /> 

Controllare il repository per le istruzioni di installazione: https://github.com/sargue/java-time-jsptags

13

Non esiste nel JSTL di 14 anni.

La soluzione migliore è la creazione di una funzione EL personalizzata. Prima crea un metodo di utilità.

package com.example; 

public final class Dates { 
    private Dates() {} 

    public static String formatLocalDateTime(LocalDateTime localDateTime, String pattern) { 
     return localDateTime.format(DateTimeFormatter.ofPattern(pattern)); 
    } 
} 

quindi creare una /WEB-INF/functions.tld in cui si registra il metodo di utilità come funzione EL:

<?xml version="1.0" encoding="UTF-8" ?> 
<taglib 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" 
    version="2.1"> 

    <tlib-version>1.0</tlib-version> 
    <short-name>Custom_Functions</short-name> 
    <uri>http://example.com/functions</uri> 

    <function> 
     <name>formatLocalDateTime</name> 
     <function-class>com.example.Dates</function-class> 
     <function-signature>java.lang.String formatLocalDateTime(java.time.LocalDateTime, java.lang.String)</function-signature> 
    </function> 
</taglib> 

Infine usano come di seguito:

<%@taglib uri="http://example.com/functions" prefix="f" %> 

<p>Date is: ${f:formatLocalDateTime(date, 'dd.MM.yyyy')}</p> 

Estendere se necessario, il metodo di rimessa Argomento Locale.

0

No, non esiste per LocalDateTime.

Tuttavia, è possibile utilizzare:

<fmt:parseDate value="${ cleanedDateTime }" pattern="yyyy-MM-dd'T'HH:mm" var="parsedDateTime" type="both" /> 
<fmt:formatDate pattern="dd.MM.yyyy HH:mm" value="${ parsedDateTime }" /> 
2

Ecco la mia soluzione (sto usando Spring MVC).

Nel regolatore aggiungere un SimpleDateFormat con il modello LocalDateTime come attributo modello:

model.addAttribute("localDateTimeFormat", new SimpleDateFormat("yyyy-MM-dd'T'hh:mm")); 

Quindi utilizzare nella JSP per analizzare il LocalDateTime e ottenere un java.util.Date:

${localDateTimeFormat.parse(date)} 

Ora è possibile analizzarlo con JSTL.