più recenti versioni dei servizi di conversione e di formattazione introdotte framework Spring per prendersi cura di questi compiti, in qualche modo lasciando dietro di sé il sistema di editor di proprietà. Tuttavia, il problema segnalato è ancora presente: il valore predefinito DateFormatter
is unable to properly convert una stringa vuota su un oggetto Date
. Quello che trovo estremamente irritante è la documentazione Spring contains a date formatter snippet example where the proper guard clauses are implemented per entrambe le conversioni (da e verso le stringhe). Questa discrepanza tra l'implementazione del framework e la documentazione del framework mi fa davvero impazzire, tanto che potrei persino provare a inviare una patch non appena avrò un po 'di tempo da dedicare all'attività.
Nel frattempo, il mio suggerimento a tutti incontrare questo problema durante l'utilizzo di una versione moderna del framework Spring è quello di creare una sottoclasse di default DateFormatter
e sovrascrivere il metodo parse
(il suo metodo print
, anche se è necessario), in modo da aggiungere una clausola di salvaguardia alla maniera di quella mostrata nella documentazione.
package com.example.util;
import java.text.ParseException;
import java.util.Date;
import java.util.Locale;
public class DateFormatter extends org.springframework.format.datetime.DateFormatter {
@Override
public Date parse(String text, Locale locale) throws ParseException {
if (text != null && text.isEmpty()) {
return null;
}
return super.parse(text, locale);
}
}
Poi, alcune modifiche devono essere applicate alla configurazione della sorgente XML: un fagiolo servizio di conversione deve essere definito, e l'attributo corrispondente nell'elemento annotation-driven
nella mvc
namespace devono essere impostati correttamente.
<mvc:annotation-driven conversion-service="conversionService" />
<beans:bean
id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<beans:property name="formatters">
<beans:set>
<beans:bean class="com.example.util.DateFormatter" />
</beans:set>
</beans:property>
</beans:bean>
Per fornire un formato di data specifica, la proprietà del fagiolo DateFormatter
pattern
deve essere impostato correttamente.
<beans:bean class="com.example.util.DateFormatter">
<beans:property name="pattern" value="yyyy-MM-dd" />
</beans:bean>
fonte
2015-04-07 18:20:34
Come può funzionare per stringhe non vuote se non è stato registrato un PropertyEditor personalizzato? – axtavt
Poiché Spring ha un numero di PropertyEditors incorporati, come in: http://static.springsource.org/spring/docs/3.0.3.RELEASE/spring-framework-reference/html/validation.html#beans-beans- conversione –
Dice anche che CustomDateEditor NON è registrato di default, ma sembra proprio che lo sia! –