Question

Sur une page JSTL / JSP, j'ai un objet java.util.Date de mon application. Je dois trouver le jour après le jour spécifié par cet objet. Je peux utiliser & Lt; jsp: scriptlet & Gt; entrer dans Java et utiliser java.util.Calendar pour faire les calculs nécessaires, mais cela me semble maladroit et inélégant.

Existe-t-il un moyen d'utiliser les balises JSP ou JSTL pour atteindre cet objectif sans avoir à basculer sur Java, ou bien ce dernier est-il le seul moyen d'y parvenir?

Était-ce utile?

La solution

Je ne suis pas fan de mettre du code java dans votre jsp.

J'utiliserais une méthode statique et une taglib pour y parvenir.

Juste mon idée cependant. Il existe de nombreuses façons de résoudre ce problème.

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>

Autres conseils

Bien que cela ne réponde pas à votre question initiale, vous pouvez peut-être éviter les tracas de passer par java.util.Calendar en procédant ainsi:

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

Vous devez utiliser un scriptlet ou écrire votre propre balise. Pour mémoire, utiliser Calendrier ressemblerait à ceci:

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

Vraiment horrible.

Malheureusement, à ma connaissance, aucune balise dans les bibliothèques JSP / JSTL standard ne vous permettrait d'effectuer ce calcul de date.

La solution la plus simple et la plus inélégante consiste simplement à utiliser du code de scriptlet pour effectuer le calcul. Vous avez déjà indiqué que vous pensiez qu'il s'agissait d'une solution maladroite et je suis d'accord avec vous. J'écrirais probablement un taglib JSP personnalisé pour l'obtenir si j'étais vous.

En général, je pense que les JSP ne devraient pas avoir de logique de données. Ils doivent obtenir du contrôleur toutes les données dont ils ont besoin pour s'afficher et toute leur logique doit indiquer comment les données sont affichées et non QU'EST-CE affiché. C’est généralement beaucoup plus simple et beaucoup moins codé / XML que d’ajouter une balise personnalisée.

Et s'il n'y a pas de réutilisation, un petit scriptlet est-il vraiment pire que le XML taglib?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top