In JSTL/JSP, dato un java.util.Date, come posso trovare il giorno successivo?

StackOverflow https://stackoverflow.com/questions/74248

  •  09-06-2019
  •  | 
  •  

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?

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top