В JSTL/JSP, учитывая java.util.Date, как мне найти следующий день?
Вопрос
На странице 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-библиотека тегов?