2008-09-16 3 views
1

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

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

ответ

6

Я не поклонник размещения 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

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

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

Это не очень хорошая идея. В локалях, использующих Daylight Savings Time, это даст неправильный день пару дней в году, в зависимости от времени, и это заставит вас задуматься о том, что случилось. – 2008-09-16 18:07:29

+1

@FrankPape Вы ошибаетесь. Свойство свойства java.util.Date - это количество миллисекунд с 1970-01-01 00:00:00 GMT. В него нет других часовых поясов. Так что сиррция правильная. – PAG 2013-06-13 16:17:11

2

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

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

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

1

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

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

1

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

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