وجوه جاكرتا

Jakarta Faces ، المعروفة سابقًا باسم Jakarta Server Faces و JavaServer Faces ( JSF )، هي مواصفة جافا لبناء واجهات مستخدم قائمة على المكونات لتطبيقات الويب . [ 2 ] وقد تم اعتمادها رسميًا كمعيار من خلال عملية مجتمع جافا كجزء من منصة جافا، الإصدار المؤسسي . وهي إطار عمل ويب MVC يُبسط عملية بناء واجهات المستخدم لتطبيقات الخادم باستخدام مكونات واجهة مستخدم قابلة لإعادة الاستخدام في الصفحة. [ 3 ]

يستخدم JSF 2.x نظام Facelets كنظام قوالب افتراضي. كما يمكن لمستخدمي البرنامج استخدام XUL أو Java . [ 4 ] أما JSF 1.x فيستخدم JavaServer Pages (JSP) كنظام قوالب افتراضي.

تاريخ

في عام 2001، اقترح طلب مواصفات جافا الأصلي (JSR) للتكنولوجيا التي أصبحت في النهاية JavaServer Faces تطوير حزمة باسم javax.servlet.ui[ 5 ].

في يونيو 2001، نشرت مجلة JavaWorld تقريراً عن تصميم فريق آمي فاولر لـ "واجهة برمجة تطبيقات JavaServer Faces" (المعروفة أيضاً باسم "Moonwalk") باعتبارها "إطار عمل لتطبيقات إنشاء واجهات مستخدم قائمة على الويب". [ 6 ]

التطورات

تم اعتماد Facelets (التي صُممت خصيصًا لـ Java Server Faces) كتقنية العرض الرسمية لـ JSF 2.0. وهذا يُزيل تعارضات دورة الحياة التي كانت موجودة مع JSP، مما كان يُجبر مطوري Java على إيجاد حلول بديلة. [ 7 ]

تُتيح التطورات الجديدة في JSF إمكانية الوصول على نطاق واسع إلى تعليقات Java التوضيحية @ManagedBean، @ManagedPropertyمما @FacesComponentيُلغي الحاجة إلى استخدامها faces-config.xml,في جميع الحالات باستثناء توسيع إطار العمل. كما تم تبسيط التنقل، مما يُلغي الحاجة إلى faces-config.xmlحالات التنقل. ويمكن استدعاء انتقالات الصفحات ببساطة عن طريق تمرير اسم العرض أو الواجهة المطلوبة.

تُعد إضافة ميزة حفظ الحالة الجزئية وتحديثات نموذج كائن المستند (DOM) جزءًا من دعم AJAX القياسي المدمج .

يتضمن أحدث إصدار من JSF دعمًا مدمجًا للتعامل مع موارد مثل الصور وملفات CSS وجافا سكريبت، مما يسمح بتضمين هذه الموارد في مكتبات المكونات، أو فصلها في ملفات JAR، أو ببساطة وضعها في مكان واحد ضمن تطبيق الويب. ويشمل ذلك التسمية المنطقية للموارد وتحديد إصداراتها.

يتضمن JSF 2.0 أيضًا عددًا من التغييرات الأخرى مثل إضافة دعم للأحداث، وأنماط التطوير والتجريب والإنتاج المنفصلة، ​​على غرار ما هو موجود RAILS_ENVفي Ruby on Rails ، وتوسيع مجموعة المكونات القياسية بشكل كبير.

سجل التحديثات

  • JSF 4.1 [ 8 ] (2025-07-01) – تحديث متوافق مع Jakarta EE 11: يزيل مراجع SecurityManager المتبقية، ويحسن توافق CDI، ويحدث واجهات برمجة التطبيقات مع الأنواع العامة المفقودة، ويضيف UUIDConverter ودعم حقن التدفق، ويحسن أحداث دورة الحياة للنطاقات المضمنة، ويتضمن توضيحات متعددة للمواصفات وتحسينات وظيفية صغيرة.
  • JSF 4.0 (15-05-2022) الميزات الرئيسية: حذف بعض العناصر المهملة (حزم إدارة أصلية، مراجع EL أصلية)، لا يوجد عرض موسع افتراضيًا، تمت إضافة ClientWindowScoped
  • JSF 3.0.0 (2020-10-28) تم تغيير اسم الحزمة من Javax إلى Jakarta.
  • JSF 2.3 (2019-09-10) الإصدار الأول من واجهة برمجة تطبيقات صفحات خادم جاكرتا لجاكرتا EE. لم يتغير كل من واجهة برمجة التطبيقات والسلوك.
  • JSF 2.3 (2017-03-28) – الميزات الرئيسية: تعابير البحث، عناوين URL بدون امتداد، التحقق من صحة الفئات الكاملة، الاتصال الفوري باستخدام WebSocket ، التكامل المحسن مع CDI. [ 9 ]
  • JSF 2.2 (2013-05-21) – قدم مفاهيم جديدة مثل طرق العرض عديمة الحالة، وتدفق الصفحات، والقدرة على إنشاء عقود موارد قابلة للنقل. [ 10 ]
  • JSF 2.1 (22-11-2010) – الإصدار الثاني للصيانة من JSF 2.0. عدد قليل جدًا من التغييرات في المواصفات. [ 11 ] [ 12 ]
  • JSF 2.0 (2009-07-01) – إصدار رئيسي لتحسين سهولة الاستخدام، والوظائف المحسّنة، والأداء. يتزامن مع Java EE 6.
  • JSF 1.2 (11-05-2006) – العديد من التحسينات على الأنظمة الأساسية وواجهات برمجة التطبيقات. يتزامن مع Java EE 5. التبني الأولي في Java EE.
  • JSF 1.1 (2004-05-27) – إصدار لإصلاح الأخطاء. لا توجد تغييرات في المواصفات.
  • JSF 1.0 (2004-03-11) – تم إصدار المواصفات الأولية.

كيف يعمل؟

يعتمد JavaServer Faces على نموذج تصميم واجهة مستخدم قائم على المكونات ، ويستخدم ملفات XML تُسمى قوالب العرض أو واجهات FaceletsFacesServlet . يقوم بمعالجة الطلبات، وتحميل قالب العرض المناسب، وبناء شجرة المكونات، ومعالجة الأحداث، وعرض الاستجابة (عادةً بلغة HTML) للعميل. يتم حفظ حالة مكونات واجهة المستخدم وغيرها من العناصر ذات الصلة في نهاية كل طلب في عملية تُسمى stateSaving (ملاحظة: transient true )، ويتم استعادتها عند إنشاء العرض التالي. يمكن لكل من جانب العميل والخادم حفظ العناصر والحالات.

JSF و AJAX

يُستخدم JSF غالبًا مع AJAX ، وهي تقنية لتطوير تطبيقات الإنترنت الغنية . AJAX عبارة عن مزيج من تقنيات وأساليب تطوير الويب التي تُتيح إنشاء واجهات مستخدم غنية. في الأصل، طُوّرت مكونات واجهة المستخدم في Mojarra ( التطبيق المرجعي لـ JSF [ 14 ] ) و Apache MyFaces للغة HTML فقط، وكان لا بد من إضافة AJAX عبر JavaScript. إلا أن هذا الوضع قد تغيّر.

بفضل دعم JSF لصيغ إخراج متعددة، يُمكن إضافة مكونات تدعم AJAX بسهولة لتحسين واجهات المستخدم المُصممة باستخدام JSF. يوفر معيار JSF 2.0 دعمًا مُدمجًا لتقنية AJAX من خلال توحيد دورة حياة طلبات AJAX وتوفير واجهات تطوير بسيطة لأحداث AJAX. يسمح هذا المعيار للحدث الذي يُطلقه العميل بالمرور عبر التحقق من الصحة، والتحويل، واستدعاء الدوال، قبل إعادة النتيجة إلى المتصفح عبر تحديث XML DOM.

يتضمن JSF 2 دعمًا للتدهور التدريجي عند تعطيل JavaScript في المتصفح.

المكونات والأطر التي تدعم تقنية AJAX

تقدم الشركات والمشاريع التالية أطر عمل أو مكتبات مكونات JSF القائمة على تقنية AJAX:

الانتقادات

ثوت ووركس، 2014

كتبت شركة ThoughtWorks في منشورها "رادار التكنولوجيا" الصادر في يناير 2014 : [ 15 ]

ما زلنا نشهد فرقًا تواجه مشاكل عند استخدام JSF (JavaServer Faces)، وننصحكم بتجنب هذه التقنية. يبدو أن الفرق تختار JSF لكونها معيارًا في JEE دون تقييم مدى ملاءمة نموذج البرمجة لها. نعتقد أن JSF معيبة لأنها تحاول تجريد HTML و CSS و HTTP ، وهو عكس ما تفعله أطر عمل الويب الحديثة تمامًا . تحاول JSF، مثل ASP.NET Web Forms، إنشاء حالة افتراضية فوق بروتوكول HTTP عديم الحالة، مما يؤدي في النهاية إلى سلسلة من المشاكل المتعلقة بالحالة المشتركة على جانب الخادم. نحن على دراية بالتحسينات في JSF 2.0، لكننا نعتقد أن النموذج معيبٌ جوهريًا. ننصح الفرق باستخدام أطر عمل بسيطة، وتبني وفهم تقنيات الويب، بما في ذلك HTTP وHTML وCSS.

الرد

في فبراير 2014، ردّ تشاغاتاي تشيفيتشي (رئيس فريق PrimeFaces) على انتقادات ThoughtWorks في منشور بعنوان "JSF لم يعد كما قيل لكم" . ويجادل تشيفيتشي بأن التحسينات التي طرأت على JSF على مر السنين توفر العديد من الميزات التي تدعم تطوير الويب الحديث، مما يتيح خيار كتابة أكواد JavaScript وHTML وCSS بشكل مستقل. وفيما يتعلق بالحالة، كتب تشيفيتشي: [ 16 ]

يُعدّ JSF إطار عمل يعتمد على الحالة بطبيعته، وتُسهّل الحالة عملية تطوير تطبيقات الويب. ومع تقنيات إدارة الحالة المُحسّنة التي تمّ إدخالها في JSF 2.0 والإصدارات الأحدث (مثل الوضع عديم الحالة، وحفظ الحالة الجزئي)، يُمكن لـ JSF أن يتوسع أيضًا.

دي زون، 2014

في المقال الذي نُشر في نوفمبر 2014 على موقع DZone الإلكتروني، بعنوان "لماذا يجب عليك تجنب JSF"، كتب ينس شودر: [ 17 ]

تبدو Facelets، تقنية العرض المفضلة في JSF، للوهلة الأولى كتقنية قوالب عادية مثل JSP أو Thymeleaf. لكن بالتدقيق، يتضح الخلل جليًا. ففي نفس المكان الذي تُهيكل فيه HTML، تضع أيضًا منطق تحديث أجزاء واجهة المستخدم عند حدوث إجراء ما. وهذا انتهاك صارخ لمبدأ فصل الاهتمامات . والأسوأ من ذلك، خاصية immediate التي تُغير دورة حياة الخادم! وإذا لم يكن هذا كافيًا، فإنها تفعل ذلك بطرق مختلفة حسب الوسم الذي تستخدمها عليه. لا يُصدق هذا!

ذا سيرفر سايد، 2016

في فبراير 2016، نشر موقع TheServerSide، وهو موقع إلكتروني متخصص في تطبيقات جافا للمؤسسات، مقالًا يُوصي بعدم استخدام JSF، مُشيرًا إلى أن استخدامه قد يُؤثر سلبًا على جودة المنتج النهائي. وقد فصّل المقال خمسة أسباب لذلك: [ 18 ]

  1. تصبح المهام البسيطة صعبة؛
  2. يفتقر برنامج JSF إلى المرونة؛
  3. منحنى التعلم حاد؛
  4. عدم التوافق مع تقنيات جافا القياسية؛ و
  5. دعم AJAX الأساسي.

مراجع

  1. "الإصدار 4.1.0" . 5 يونيو 2024. تم الاطلاع عليه في 5 يونيو 2024 .
  2. وجوه جاكرتا 4.0
  3. "دليل JSF 2.0" . mkyong. 12-12-2010 . تم الاطلاع عليه بتاريخ 28-04-2017 . JavaServer Faces (JSF) 2.0 هو إطار عمل ويب MVC يركز على تبسيط بناء واجهات المستخدم (يأتي مع أكثر من 100 علامة واجهة مستخدم جاهزة) لتطبيقات الويب المكتوبة بلغة Java، ويجعل تنفيذ مكونات واجهة المستخدم القابلة لإعادة الاستخدام أمرًا سهلاً.
  4. NoVDL: اكتب واجهات JSF الخاصة بك بلغة جافا خالصة
  5. "JSR 127: JavaServer Faces" . عملية مجتمع جافا . شركة أوراكل. 2014. تم الاسترجاع في 5 أغسطس 2014. 2.6 هل يوجد اسم حزمة مقترح لمواصفات واجهة برمجة التطبيقات؟ (مثل javapi.something، org.something، إلخ.) [:] javax.servlet.ui
  6. أرمسترونغ، إريك (6 يونيو 2001). "خدمات الويب في جافا: ما الذي لا يُعجبك فيها؟" . جافا وورلد . تم الاسترجاع في 27 يوليو 2020. تعد واجهة برمجة تطبيقات JavaServer Faces (المعروفة أيضًا باسم Moonwalk) بتقديم حل أنيق لتنفيذ وظائف تفاعلية على المتصفحات غير المتوافقة. [...] صممت هذه الواجهة من قبل فريق بقيادة إيمي فاولر، مهندسة AWT وSwing في شركة صن، وستوفر مجموعة من أدوات واجهة المستخدم الرسومية التي ستعمل على المتصفحات الشائعة باستخدام لغة HTML القياسية.
  7. بيرغستن، هانز. "تحسين JSF عن طريق التخلي عن JSP" . أورايلي . تم الاطلاع عليه بتاريخ 18 أغسطس 2011 .
  8. "إصدار Jakarta EE 11 | Java EE 11 | تنزيل المنتجات المتوافقة والمواصفات | مؤسسة Eclipse | Jakarta EE | مؤسسة Eclipse" . Jakarta® EE: الموطن الجديد لـ Java السحابية الأصلية . تم الاطلاع عليه بتاريخ 26 يناير 2026 .
  9. تيمز، أرجان. "ما الجديد في JSF 2.3؟" . تأملات مطور Java EE . تم الاسترجاع في 27 يوليو 2020 .
  10. JSF 2.2 (JSR-344) الإصدار النهائي | استكشاف التقنيات من خلال أخبار جافا. مؤرشف بتاريخ 27 يوليو 2020 في Wayback Machine . Blog.oio.de. تم الاطلاع عليه بتاريخ 27 يوليو 2020.
  11. JSR 314 JavaServer Faces 2.1 JSF 2.1 | techscouting through the java news مؤرشف بتاريخ 27 يوليو 2020 في Wayback Machine . Blog.oio.de. تم الاطلاع عليه بتاريخ 27 يوليو 2020.
  12. ^ بوش ، آندي (2010-11-29). "كان جديدا في JSF 2.1" (باللغة الألمانية). it-republik.de . تم الاسترجاع 2013/02/19 .
  13. "الإصدار 4.1.12" . 29 يوليو 2026. تم الاطلاع عليه في 30 يوليو 2026 .
  14. لوبك، رايان (5 ديسمبر 2007). "مشروع موجارا - حصول مشروع JSF RI على اسم رمزي" . مدونة رايان لوبك . صن مايكروسيستمز . شركة أوراكل . مؤرشف من الأصل في 7 أبريل 2017.
  15. "رادار التكنولوجيا" (ملف PDF) . ثوت ووركس. يناير 2014. ص 12. مؤرشف من الأصل (ملف PDF) بتاريخ 7 أبريل 2016. تم الاطلاع عليه بتاريخ 30 يناير 2014 . 
  16. "لم يعد برنامج JSF كما قيل لكم" . برايم فيسز . ١٢ فبراير ٢٠١٤. مؤرشف من الأصل في ١٠ سبتمبر ٢٠١٧. تم الاطلاع عليه بتاريخ ٢٤ نوفمبر ٢٠٢٠ .
  17. ينس شودر (نوفمبر 2014). "لماذا يجب عليك تجنب JSF" . DZone.
  18. ماكنزي، كاميرون (16 فبراير 2016). "خمسة عيوب لاختيار JSF كإطار عمل لتطبيقات الويب" . TheServerSide . تم الاطلاع عليه في 22 ديسمبر 2020 .