В JSTL / JSP, учитывая java.util.Date, как мне найти следующий день? - PullRequest
1 голос
/ 16 сентября 2008

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

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

Ответы [ 5 ]

6 голосов
/ 16 сентября 2008

Я не фанат размещения java-кода в вашем jsp.

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

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

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>
2 голосов
/ 16 сентября 2008

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

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

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

2 голосов
/ 16 сентября 2008

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

// Date d given
d.setTime(d.getTime()+86400000);
1 голос
/ 16 сентября 2008

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

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

1 голос
/ 16 сентября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...