Wie gebe ich Datum für eine Struts2-Aktion von einem JSP ein?

8

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.

    
Anand 07.03.2010, 18:57
quelle

7 Antworten

8

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:

  1. Erstellen Sie die Konverterklasse (unter Verwendung des von Ihnen benötigten Datumsformats):

    %Vor%
  2. 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%     
Samuel 19.07.2011 14:43
quelle
4

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

    
Alfredo Osorio 07.03.2011 18:23
quelle
1

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.

    
PJT 07.03.2010 19:48
quelle
0

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.

    
beatupunit 23.11.2010 21:05
quelle
0

jsp:

%Vor%

?. Eigenschaften

%Vor%

Aktion.java

%Vor%

Skript: Sie können jquery.datepicker hinzufügen (Ich empfehle struts datepicker nicht): Ссылка

%Vor%     
surfealokesea 13.02.2013 07:00
quelle
0
%Vor%     
Jiawu Zhang 28.05.2015 09:02
quelle
0

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 ();

    
user4966321 30.06.2015 09:52
quelle

Tags und Links