Pergunta

Em uma página JSTL/JSP, tenho um objeto java.util.Date do meu aplicativo.Eu preciso encontrar o dia depois o dia especificado por esse objeto.Posso usar <jsp:scriptlet> para entrar em Java e usar java.util.Calendar para fazer os cálculos necessários, mas isso parece desajeitado e deselegante para mim.

Existe alguma maneira de usar tags JSP ou JSTL para atingir esse objetivo sem precisar mudar para Java completo, ou esta última é a única maneira de conseguir isso?

Foi útil?

Solução

Não sou fã de colocar código java no seu jsp.

Eu usaria um método estático e um taglib para fazer isso.

Apenas minha ideia.Existem muitas maneiras de resolver esse 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();
}

funções.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>

Outras dicas

Embora isso não responda à sua pergunta inicial, talvez você possa eliminar o incômodo de passar por java.util.Calendar fazendo o seguinte:

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

Você deve usar um scriptlet ou escrever sua própria tag.Para que conste, usar o Calendário ficaria assim:

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

Verdadeiramente horrível.

Infelizmente, não há nenhuma tag nas bibliotecas JSP/JSTL padrão que eu conheça que permita fazer esse cálculo de data.

A solução mais simples e deselegante é apenas usar algum código scriptlet para fazer o cálculo.Você já afirmou que acha que esta é uma solução desajeitada e eu concordo com você.Eu provavelmente escreveria um taglib JSP personalizado para conseguir isso se fosse você.

Em geral, acho que JSPs não deveriam ter lógica de dados.Eles devem obter todos os dados que precisam exibir do Controlador e toda a sua lógica deve ser sobre COMO os dados são exibidos, e não O QUE é exibido.Isso geralmente é muito mais simples e com muito menos código/XML do que adicionar uma tag personalizada.

E se não houver reutilização, um pequeno scriptlet é realmente muito pior que o XML taglib?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top