في 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 الكامل، أم أن الأخيرة هي الطريقة الوحيدة لتحقيق ذلك؟

هل كانت مفيدة؟

المحلول

أنا لست من محبي وضع كود جافا في ملف 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();
}

وظائف.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 مخصصة للحصول على هذا لو كنت مكانك.

بشكل عام، أعتقد أنه لا ينبغي أن يكون لدى JSPs منطق بيانات.يجب أن يحصلوا على جميع البيانات التي يحتاجون لعرضها من وحدة التحكم ويجب أن يدور كل منطقهم حول كيفية عرض البيانات، وليس ما يتم عرضه.عادةً ما يكون هذا أسهل كثيرًا وأقل بكثير من التعليمات البرمجية/XML من إضافة علامة مخصصة.

وإذا لم يكن هناك أي إعادة استخدام، فهل البرنامج النصي الصغير حقًا أسوأ بكثير من taglib XML؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top