2008-09-16 8 views
1

Auf einer JSTL/JSP-Seite habe ich ein java.util.Date-Objekt aus meiner Anwendung. Ich muss den Tag nach der Tag von diesem Objekt angegeben finden. Ich kann < jsp: scriptlet > verwenden, um in Java zu fallen und java.util.Calendar zu verwenden, um die notwendigen Berechnungen durchzuführen, aber das fühlt sich plump und unelegant zu mir an.Wie finde ich den nächsten Tag in JSTL/JSP mit java.util.Date?

Gibt es eine Möglichkeit, JSP- oder JSTL-Tags zu verwenden, um dieses Ziel zu erreichen, ohne in volles Java wechseln zu müssen, oder ist letzteres die einzige Möglichkeit, dies zu erreichen?

Antwort

6

Ich bin kein Fan von Java-Code in Ihrem JSP.

Ich würde eine statische Methode und eine Taglib verwenden, um dies zu erreichen.

Nur meine Idee, obwohl. Es gibt viele Möglichkeiten, dieses Problem zu lösen.

public static Date addDay(Date date){ 
    //TODO you may want to check for a null date and handle it. 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime (date); 
    cal.add (Calendar.DATE, 1); 
    return cal.getTime(); 
} 

functions.tld

<?xml version="1.0" encoding="UTF-8" ?> 
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" 
    version="2.0"> 
    <description>functions library</description> 
    <display-name>functions</display-name> 
    <tlib-version>1.1</tlib-version> 
    <short-name>xfn</short-name> 
    <uri>http://yourdomain/functions.tld</uri> 
    <function> 
    <description> 
     Adds 1 day to a date. 
    </description> 
    <name>addDay</name> 
    <function-class>Functions</function-class> 
    <function-signature>java.util.Date addDay(java.util.Date)</function-signature> 
    <example> 
     ${xfn:addDay(date)} 
    </example> 
    </function> 
</taglib> 
2

Zwar ist dies nicht Ihre erste Frage nicht beantworten, Sie vielleicht die Mühe zu gehen durch java.util.Calendar, indem Sie diese beseitigen können:

// Date d given 
d.setTime(d.getTime()+86400000); 
+3

Dies ist keine gute Idee. In Ländern, die Sommerzeit verwenden, wird dies den falschen Tag ein paar Tage im Jahr geben, abhängig von der Zeit, und es wird Sie verrückt machen, herauszufinden, was los ist. –

+1

@FrankPape Sie liegen falsch. Die Zeiteigenschaft eines java.util.Date ist die Anzahl der Millisekunden von 1970-01-01 00:00:00 GMT. Keine anderen Zeitzonen kommen hinzu. Also, Sirprize ist richtig. – PAG

+0

@PAG Wenn ich noch einmal darüber nachdenke, glaube ich immer noch, dass dies eine schlechte Idee ist, aber aus einem anderen Grund. Ich ging davon aus, dass einige Tage nicht genau 86400 Sekunden haben, weil es Tage mit einer Stunde weniger oder mehr geben wird. Das passiert bei GMT nicht mit Sommerzeit, also hast du recht - danke für die Korrektur. Meine neue Sorge ist Schaltsekunden. java.util.Date berücksichtigt keine Schaltsekunden, aber es ist nicht unvorstellbar, dass einige Bibliotheken dies tun würden. –

2

Sie müssen entweder eine scriptlet verwenden oder Ihre eigenen Tag schreiben . Für die Aufzeichnung würde die Verwendung von Kalender wie folgt aussehen:

Calendar cal = Calendar.getInstance(); 
cal.setTime (date); 
cal.add (Calendar.DATE, 1); 
date = cal.getTime(); 

Wirklich schrecklich.

1

Leider gibt es kein Tag in den Standard-JSP/JSTL-Bibliotheken, von denen ich weiß, dass Sie diese Datumsberechnung durchführen könnten.

Die einfachste und uneleganteste Lösung besteht darin, nur einen Skriptcode zu verwenden, um die Berechnung durchzuführen. Sie haben bereits gesagt, dass Sie dies für eine klobige Lösung halten, und ich stimme Ihnen zu. Ich würde wahrscheinlich eine benutzerdefinierte JSP Taglib schreiben, um das zu bekommen, wenn ich du wäre.

1

Im Allgemeinen denke ich, JSPs sollten keine Daten Logik haben. Sie sollten alle Daten erhalten, die sie vom Controller anzeigen müssen, und ihre gesamte Logik sollte sich darauf beziehen, WIE die Daten angezeigt werden und nicht WAS angezeigt wird. Dies ist normalerweise viel einfacher und viel weniger Code/XML als das Hinzufügen eines benutzerdefinierten Tags.

Und wenn es keine Wiederverwendung gibt, ist ein kleines Scriptlet wirklich so viel schlechter als das taglib XML?

+0

Einverstanden mit dem ersten Punkt, den Mwanji gemacht hat. –