JSTL/JSP では、java.util.Date が指定された場合、次の日をどのように見つけますか?
質問
JSTL/JSP ページには、アプリケーションの java.util.Date オブジェクトがあります。その日を見つけなければなりません 後 そのオブジェクトによって指定された日。<jsp:scriptlet> を使用して Java にドロップし、java.util.Calendar を使用して必要な計算を行うこともできますが、これは私にとっては不器用で洗練されていないように感じられます。
完全な Java に切り替えることなく、JSP または JSTL タグを使用してこの目的を達成する方法はありますか、それとも後者がこれを達成する唯一の方法ですか?
解決
私は JSP に Java コードを入れるのは好きではありません。
これを実現するには、静的メソッドとタグライブラリを使用します。
あくまで私の考えですが。この問題を解決するには多くの方法があります。
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 の量も大幅に少なくなります。
そして、再利用がまったく行われていない場合、小さなスクリプトレットは本当に taglib XML よりもはるかに悪いのでしょうか?