In JSTL/JSP, dato un java.util.Date, come posso trovare il giorno successivo?
Domanda
Su una pagina JSTL/JSP, ho un oggetto java.util.Date dalla mia applicazione.Devo trovare il giorno Dopo il giorno specificato da quell'oggetto.Posso usare <jsp:scriptlet> per entrare in Java e usare java.util.Calendar per fare i calcoli necessari, ma mi sembra goffo e inelegante.
Esiste un modo per utilizzare i tag JSP o JSTL per raggiungere questo scopo senza dover passare a Java completo o è quest'ultimo l'unico modo per raggiungere questo obiettivo?
Soluzione
Non sono un fan dell'inserimento del codice Java nel tuo jsp.
Utilizzerei un metodo statico e un taglib per ottenere questo risultato.
È solo una mia idea però.Esistono molti modi per risolvere questo problema.
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();
}
funzioni.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>
Altri suggerimenti
Anche se questo non risponde alla tua domanda iniziale, potresti forse eliminare il fastidio di passare attraverso java.util.Calendar in questo modo:
// Date d given
d.setTime(d.getTime()+86400000);
Devi utilizzare uno scriptlet o scrivere il tuo tag.Per la cronaca, l'utilizzo di Calendar sarebbe simile a questo:
Calendar cal = Calendar.getInstance();
cal.setTime (date);
cal.add (Calendar.DATE, 1);
date = cal.getTime ();
Davvero orribile.
Sfortunatamente non esiste alcun tag nelle librerie JSP/JSTL standard che io conosca che ti consenta di eseguire questo calcolo della data.
La soluzione più semplice e poco elegante è utilizzare semplicemente del codice scriptlet per eseguire il calcolo.Hai già affermato che ritieni che questa sia una soluzione goffa e sono d'accordo con te.Probabilmente scriverei un taglib JSP personalizzato per ottenere questo se fossi in te.
In generale, penso che i JSP non dovrebbero avere la logica dei dati.Dovrebbero ottenere tutti i dati di cui hanno bisogno per essere visualizzati dal Controller e tutta la loro logica dovrebbe riguardare COME vengono visualizzati i dati, non COSA viene visualizzato.Di solito è molto più semplice e richiede molto meno codice/XML rispetto all'aggiunta di un tag personalizzato.
E se non avviene alcun riutilizzo, un piccolo scriptlet è davvero molto peggiore del taglib XML?