| 

.NET C# Java Javascript Exception

Locale und Datumsformat - oder: verloren in Spring's Katakomben

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


Locale und Datumsformat - oder: verloren in Spring's Katakomben

rawi - 22.06.2009 10:33
Hallo allerseits,

(Falls noch nicht allen bekannt: ich bin bei Suchen über eine Möglichkeit gestolpert, die Locale zu ändern und zwar unabhängig von der Locale, die der Browser im Request dem Server mitteillt: man hängt EINMALIG an dem URL "?lang=de" und die Locale bleibt so für die ganze Dauer der Session, ohne sie ständig so mittelen zu müssen)

Während des Wochenendes ist mir aber eine Kleinigkeit/Ausnahme aufgefallen, die mir das Leben schwer machen wird:
Im Unterschied zur automatischen Wahl der Message-Datei und zur Formatierung der Nummern abhängig von der Locale, wird die Formatierung des Datums nicht angepasst. Auch die Nummern-Formatierung nervt ein Bisschen, wenn alle Nummern den Tausender-Punkt haben...

Ich wollte fürs Geburtsdatum ein normales Input. Ein Datum ist schneller geschrieben als mit dem datePicker 3 mal gewählt oder mit dem YUI-Calendar monatsweise geblättert, falls man ein Geburtsdatum vor 60 Jahren eingeben muss...)

Ausgenommen die Lösung, dass man in _jedem_ Controller _jedes_ Datumsfeld extra in _jeder_ Action in Code behandeln könnte, soll es für solche Situationen die PropertyEditorRegistrar's geben, die alles lösen würden.
(Wieder irgendwelche komplizierte Innereien von Spring...)

Ich habe das hier und das hier ohne Erfolg probiert. (Copy-and-Paste hat nicht gereicht... mehr kann ich nicht sagen...)

Hat jemand diese Situation schon gelöst und könnte mir die Code-Schnippseln zeigen, die ich bräuchte?

Herzlichen Dank im Voraus!
Schöne Grüße und erfolgreiches Hacking in der neuen Woche!
Rawi


Re: Locale und Datumsformat - oder: verloren in Spring's Katakomben

rawi - 23.06.2009 15:14
Hallo Horst,

> Es gibt TAGs zur Formatierung von von Zahlen
> (formatNumber) und Daten.(formatDate). Da kannst
> du dein gewünschtes Format angeben.
> Damit du das nicht immer alles selber manuell
> machen musst, würde ich die Templates anpassen,
> aus denen die Views generiert werden.
> Bei der Gelegenheit kannst du da auch den
> DatePicker rausnehmen und durch ein Textfeld
> ersetzen, wenn dir das besser gefällt.

Die Tags sind mir bekannt, sie dienen jedoch nur der Ausgabe und ich müsste sie auf eine einzige Möglichkeit hin hart kodieren. Das wäre keine Localisation.
Noch größere Probleme würden mir die Inputs machen, die abhängig von der Locale dann den Input "automatisch" übernehmen müssten.
(Die Inputs type="text" machen das nämlich mit den nummern, abhängig von der Locale)

Ob in dem Datum-Input der User mit Locale=en 06/23/2009 oder ISO=2009-06-23 oder der Locale=de 23.06.2009 oder der LOcale=fr 23/06/2009 und das Datum wie ein Datum in meine Datenbank landet, DAS müsste ich(?!) selbst an stelle des DatePickers machen... :-)))))

Ich glaube, deswegen haben die Grails-Erfinder auch den DatePicker dahin gestellt, es war ihnen zu kompliziert... :-)

Schöne Grüße
Rawi


Re: Locale und Datumsformat - oder: verloren in Spring's Katakomben

rawi - 23.06.2009 15:56
> Aber du schreibst, dass die Inputs das schon abhängig vom Locale machen. Was willst du mehr?

Das machen sie für Nummern.
Ich werde probieren, ob sie das auch für Datums-formate machen.

Ciao
Rawi


Re: Locale und Datumsformat - oder: verloren in Spring's Katakomben

rawi - 23.06.2009 17:56
Nope :-(

ich bekomme z.B. im normalen Input den Datenbankwert "1999-09-19 00:00:00.0" zum Editieren.

Etwas anderes (als Format) wird nicht angenommen... inklusive die Zero'S.

Das heißt, ich müsste selbst parsen und das Datum aus Teilen des Strings bilden...

Entweder versteht hier jemand mehr von den eingangs erwähnten PropertyEditorRegistrar's oder... wenn nicht... dann ist Christian's (saurier) Lösung die bisher Beste: die User erziehen, dass der DatePicker eine wunderbare Sache sei...

Gruß
Rawi


Re: Locale und Datumsformat - kleine Neuigkeiten

rawi - 25.06.2009 16:32
Ich habe noch ein Paar kleine "Entdeckungen" bezüglich Datums-Darstellung gemacht:

In der messages.properties gibt's die Property "default.date.format". Die kann man auch in die anderen Locale_messages hinzufügen - und freilich überall den Wert anpassen.

Für die Darstellung des Datums (in show.gsp oder list.gsp etc) kann man dann
<g:formatDate date="${personInstance.bday}" />

Wenn man den Format nicht explizit mitgibt (obwohl die Referenz sagt, es wäre required ?!), dann hollt sich formatDatum das DefaultFormat aus der entsprechenden Locale-messages.properties.

Ich habe in den Sources gesehen, es gebe auch ein nicht dokumentierter Parameter formatName, mit dem man das selbe erreichen könnte.

Die Frage ist: wie lange leben diese kleinen Hacks mit undokumentierten Features zwischen Versionswechsel?

Bei den Inputs funktioniert diese Methode nicht, da muss man selbst parsen, ODER den datePicker nutzen, ODER (wie Horst - milkyman meinte) einen eigenen Tag schreiben...

Schöne Grüße
Rawi


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Locale und Datumsformat - oder: verloren in Spring's Katakomben" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.