В JSTL/JSP, учитывая java.util.Date, как мне найти следующий день?

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

  •  09-06-2019
  •  | 
  •  

Вопрос

На странице JSTL/JSP у меня есть объект java.util.Date из моего приложения.мне нужно найти день после день, указанный этим объектом.Я могу использовать <jsp:scriptlet>, чтобы перейти в Java, и использовать java.util.Calendar для выполнения необходимых вычислений, но мне это кажется неуклюжим и неэлегантным.

Есть ли какой-нибудь способ использовать теги JSP или JSTL для достижения этой цели без необходимости перехода на полноценную Java, или последний способ является единственным способом добиться этого?

Это было полезно?

Решение

Я не сторонник размещения Java-кода в вашем JSP.

Для этого я бы использовал статический метод и библиотеку тегов.

Хотя это просто моя идея.Есть много способов решить эту проблему.

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();
}

функции.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>

Другие советы

Хотя это не отвечает на ваш первоначальный вопрос, вы, возможно, могли бы устранить трудности с использованием java.util.Calendar, выполнив следующее:

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

Вам придется либо использовать скриптлет, либо написать свой собственный тег.Для справки, использование Календаря будет выглядеть так:

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

Действительно ужасно.

К сожалению, в известных мне стандартных библиотеках JSP/JSTL нет тега, который позволил бы вам выполнить этот расчет даты.

Самое простое и неэлегантное решение — просто использовать какой-нибудь скриптлет для выполнения вычислений.Вы уже заявили, что считаете это неуклюжим решением, и я с вами согласен.На вашем месте я бы, вероятно, написал собственную библиотеку тегов JSP, чтобы получить это.

В общем, я считаю, что в JSP не должно быть логики данных.Они должны получать все данные, необходимые для отображения, от контроллера, и вся их логика должна быть связана с тем, КАК данные отображаются, а не ЧТО отображается.Обычно это намного проще и требует меньше кода/XML, чем добавление пользовательского тега.

И если никакого повторного использования не происходит, действительно ли крошечный скриптлет настолько хуже, чем XML-библиотека тегов?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top