Porównaj ceny domen i usług IT, sprzedawców z całego świata

Ustaw format daty dla tekstu wejściowego za pomocą Spring MVC


Jak ustawić format
Date
https://docs.oracle.com/javase ... .html
w polu tekstowym ze Spring MVC?
Używam biblioteki Spring Form Tag Library i tagu
input
.
Teraz otrzymuję coś takiego:
Pon, 28 maja, 11:09:28 CEST 2012
.
Chciałbym wyświetlić datę w formacie
dd/MM/rrrr
.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

zarejestruj edytor dat w kontrolerze yr:
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(LocalDate.class, new LocalDateEditor());
}

a wtedy sam edytor danych mógłby wyglądać tak:
public class LocalDateEditor extends PropertyEditorSupport{ @Override
public void setAsText(String text) throws IllegalArgumentException{
setValue(Joda.getLocalDateFromddMMMyyyy(text));
} @Override
public String getAsText() throws IllegalArgumentException {
return Joda.getStringFromLocalDate((LocalDate) getValue());
}
}

Używam własnej abstrakcyjnej klasy narzędziowej (Joda) do analizowania dat, a właściwie LocalDates from

Biblioteki Joda
http://joda-time.sourceforge.net/
Datetime - zalecane jako standardowa data/kalendarz java to obrzydliwość IMHO. Ale musisz mieć pomysł. Alternatywnie możesz zarejestrować edytor globalny, więc nie musisz tego robić na każdym kontrolerze (nie pamiętam jak).
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Gotowy! Właśnie dodałem tę metodę do mojej klasy kontrolera:
@InitBinder
protected void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
binder.registerCustomEditor(Date.class, new CustomDateEditor( dateFormat, false));
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli chcesz sformatować wszystkie swoje daty bez konieczności powtarzania tego samego kodu w każdym kontrolerze, możesz utworzyć

globalny InitBinder

w klasie z


z adnotacją @ControllerAdvice.

Kroki
>

1.

Utwórz klasę DateEditor, która sformatuje Twoje daty, na przykład:
public class DateEditor extends PropertyEditorSupport { public void setAsText(String value) {
try {
setValue(new SimpleDateFormat("dd/MM/yyyy").parse(value));
} catch(ParseException e) {
setValue(null);
}
} public String getAsText() {
String s = "";
if (getValue() != null) {
s = new SimpleDateFormat("dd/MM/yyyy").format((Date) getValue());
}
return s;
}


2.

Utwórz klasę z adnotacją @ControllerAdvice (nazwałem ją GlobalBindingInitializer):
@ControllerAdvice
public class GlobalBindingInitializer {/* Initialize a global InitBinder for dates instead of cloning its code in every Controller */ @InitBinder
public void binder(WebDataBinder binder) {
binder.registerCustomEditor(Date.class, new DateEditor());
}
}


3.

w pliku konfiguracyjnym Spring MVC (np. webmvc-config.xml) dodaj linie, aby umożliwić Springowi skanowanie pakietu, w którym utworzyłeś klasę GlobalBindingInitializer. Na przykład, jeśli utworzyłeś GlobalBindingInitializer w pakiecie org.example.common:
<context:component-scan base-package="org.example.common"/>

To koniec!

Źródła

:

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się