Ich habe hier auf meiner jsp-Seite eine Menge Probleme. Welches Tag sollte ich verwenden, um ein Datum (JJJJ-MM-TT) vom Benutzer abzurufen und in einer Date-Eigenschaft einer Struts2-Aktion zu speichern?
Die Eigenschaft in meiner Aktion wird als java.util.Date deklariert. Ich möchte, dass die Eingabe von JSP-Seite in dieser Eigenschaft landen.
bitte helfen.
Ich erhalte einen ungültigen Feldfehler (in JSP), wenn ein s: textfield-Tag verwendet wird, um ein Datum im richtigen Format einzugeben.
Ich weiß, dass dieser Beitrag etwas alt ist, aber eine Lösung kann für andere nützlich sein.
Der Standardkonverter von Struts scheint nicht richtig zu funktionieren. Der Feldfehler tritt sogar bei schreibgeschützten Feldern auf, die von der Aktion ausgefüllt wurden.
Ich habe es gelöst, indem ich meinen eigenen Konverter definiert habe:
Erstellen Sie die Konverterklasse (unter Verwendung des von Ihnen benötigten Datumsformats):
%Vor%Fügen Sie die Konvertierungsannotation in den Eigenschaften-Setter ein (oder verwenden Sie eine Datei "conversion.properties")
%Vor%In meinem Fall musste ich es nicht bearbeiten, sondern wollte das Format im JSP angeben. Ich habe ein zusätzliches verstecktes Feld verwendet, um den ursprünglichen Wert beizubehalten (eine andere Alternative wäre die Verwendung der Schnittstelle Preparable gewesen):
%Vor%So habe ich das gelöst.
%Vor%Und in Ihren Nachrichteneigenschaften ein Schlüssel / Wert:
%Vor%Dies gibt das Standardformat an und Sie müssen es nicht in jedes Datumstag schreiben.
Hoffe, das hilft
Vielleicht verstehe ich die Frage nicht. Aber ich hoffe, dass dieses Beispiel hilft (obwohl dieser Code nicht funktionieren wird, nur um Ihnen eine Vorstellung davon zu geben, wie es stunts2 seine Magie ausübt); Für die Eingabe von Formularen benötigen Sie also eine Inhaberklasse in Java, damit Sie Ihr Datum von Ihrer Aktionsklasse wie Holder.java aufrufen können:
%Vor%Ihre Holder.java-Validierung, damit Sie sicherstellen können, dass es sich um ein Datum Holder-validation.xml:
handelt %Vor%Ihre Aktionsklasse, in der Sie Ihr holder.getdate aufrufen, um Ihr Datum zu bekommen getDateAction.java:
%Vor%Ihre jsp-Form, in der Sie dem Kunden die Möglichkeit geben, das Datum einzugeben. Stellen Sie sicher, dass die Eingabe name="halter.date" ist. Hier ist site.jsp:
%Vor%und last but not least Ihre struts.xml:
%Vor%Es gibt eine Erklärung des Struts2 Datumsformats hier: Struts 2 Datumsformat Beispiele
Aber ich glaube, das Tag, nach dem du in Jsp suchst, ist
%Vor%Dabei ist Date_Name das Date-Objekt in Java.
Das <s:date />
-Tag zeigt nur Daten an - es liefert keine Eingabe.
Ich glaube nicht, dass Struts eine out-of-the-box-Datumseingabe bietet, es sei denn, Sie verwenden die date-time-Auswahl, bei der es sich um ein Dojo / JavaScript-Tag handelt. Weitere Informationen dazu finden Sie hier: Ссылка
Wenn Sie diese Route nicht verwenden, müssen Sie höchstwahrscheinlich das Datum Ihrer JSP einer Zeichenfolge zuordnen und sie dann in Ihrer Aktionsklasse formatieren. Sie können dies vereinfachen, indem Sie Struts zuerst den Wert bestätigen lassen.
jsp:
%Vor%?. Eigenschaften
%Vor%Aktion.java
%Vor%Skript: Sie können jquery.datepicker hinzufügen (Ich empfehle struts datepicker nicht): Ссылка
%Vor% Es gibt eine Lösung, die ich ausprobiert habe und es funktioniert hat :)
1) Bewahren Sie die Spalte, in der Sie das Datum speichern möchten, nur in der Tabelle der Datenbank im Datentyp "DATE" auf.
2) Verwenden Sie nur das Textfield-Tag in der JSP-Seite. Verwenden Sie kein Date-Tag.
Hinweis : Stellen Sie sicher, dass Sie ein Benutzereingabedatum nur im Format JJJJ-MM-TT eingeben, indem Sie einen Platzhalter in das Textfeld setzen !
3) Bewahren Sie die Variable nur für den Zugriff auf dieses Feld vom Typ string auf. Verwenden Sie den Datentyp DATE nicht.
4) Führen Sie jetzt Query: Wählen Sie DATE_FORMAT (Datumsspaltenname, '% d /% m% / Y') als date_zwei von Tabellenname; und Sie erhalten Datum aus dieser Spalte in dd / mm / yyyy-Format, auch wenn Es wird im Format JJJJ-MM-TT in der Tabelle gespeichert.
5) Und Sie können auch die Daten Ihrer Datumsspalte mit curdate () und verwandten Funktionen vergleichen und es funktioniert :).
6) Wie ich Query verwendet: Wählen Sie ID, Name, DATE_FORMAT (datecolumnname, '% d /% m /% Y') als datecolumn2 von Tabellenname, wo datecolumnname & gt; = curdate ();