0

Ich habe eine Anwendung mit einer Benutzerdomäne, die sich von SecUser (Sicherheitsbenutzerklasse in Spring Secrity Core) erstreckt. In dieser Domäne (Benutzer) habe ich mehrere Felder und eines davon ist: Datum birthDate. Das Gerüst schafft die g: datePicker Tag, aber ich mag den Stil nicht.Datumsfeld in Domäne und g: Text-Tag funktioniert nicht in Grails

Ich würde gerne implementieren, zum Beispiel: Datepicker für Boostrap (http://www.eyecon.ro/bootstrap-datepicker/), aber diese Bibliothek verwendet ein Eingabefeld = "Text" Feld.

Meine Ansicht (.gsp), wenn ich eine Texteingabe setzen, die speichern und aktualisieren Aktionen in meinem Controller nicht, weil arbeiten, wenn ich userInstance.birthDate der Wert null erhalten.

Wenn ich das g: datePicker Tag setze, erhält mein Controller den Wert korrekt.

Wie kann ich dieses Problem lösen? Danke.

EDITED:

Code of Datepicker Bootstrap aus meiner Sicht:

<div class="input-group date date-picker" data-date-format="dd-MM-yyyy" data-date-end-date="+0d"> 
     <input type="text" id="birthDate" name="birthDate" value="${formatDate(format:'dd-MM-yyyy',date: userInstance?.birthDate)}" class="form-control form-shadow"/> 
     <span class="input-group-btn"> 
      <button class="btn default" type="button"> 
        <i class="fa fa-calendar"></i> 
      </button> 
     </span> 
</div> 
<span class="help-block"> 
    <h5> 
     <g:message code="custom.date.picker.description" default="Select a date"/> 
    </h5> 
</span> 

Jetzt kann ich den Wert in meinem Controller erhalten mit params.birthDate aber dem nächsten Fehler angezeigt:

Class java.text.ParseException 
Message Unparseable date: "01-04-2016" 

GELÖST:

Die Lösung bestand darin, in Datepicker für die Bootstrap-Bibliothek korrekt zu analysieren. Diese Bibliothek verwendet einen anderen Parser. Zum Beispiel: '2016.01.04' in Grails ist 'dd-MM-yyyy', aber in dieser Bibliothek ist: 'dd-mm-yyyy'.

In diesem Link die Formate angezeigt werden: https://bootstrap-datepicker.readthedocs.org/en/latest/options.html#format

Außerdem ist es notwendig, die folgenden Zeilen in Config.groovy hinzuzufügen:

grails.databinding.dateFormats = [ 'dd-MM-yyyy', 'yyyy-MM-dd', 'yyyy-MM-dd HH:mm:ss.S' ]

Antwort

1

Die Straight-Forward-Lösung ist, Ordnen Sie das Datumsfeld in Ihrer Controller-Aktion zu:

def save(User user) { 
    .... 
    user.birthDate = new SimpleDateFormat('dd-MM-yyyy').parse params.birthDate 
    ... 
} 
+0

Diese Lösung funktioniert nicht, weil ich den gleichen Wert in meinem Controller bekomme: null. Ich kann sehen mit: log.error (userInstance.birthDate). Ich habe meine Frage bearbeitet, um den Code der Eingabe hinzuzufügen. –

+0

@ JesúsIglesias Ihrem Eingabefeld fehlt das 'name' Attribut. daher "Null" in der Steuerung. es sollte '' – injecteer

+0

Jetzt sein. Ich kann den Wert in meinem Controller bekommen, aber ich bekomme den nächsten Fehler: Klasse java.text.ParseException Nachricht Unrated Datum: "01-04-2016" –

Verwandte Themen