سؤال

أريد أن استخدام Omnifaces 1.7 في تطبيقي Jave EE 7.تطبيقي عبارة عن EAR يحتوي على JARs و حرب نحيفة.تعتمد بعض ملفات JAR الخاصة بي على OmniFaces، لذلك يجب أن تكون قطعة OmniFaces الأثرية في EAR ولكن ليس في WEB-INF/lib في الحرب.

إليك كيف تبدو أذني:

EAR
 +-- lib
 |    +-- [some 3rd party JARs]
 |    `-- omnifaces.jar
 +-- myEJBs.jar
 `-- myWAR.war

عندما أضع الأمر بهذه الطريقة، فإن محولات OmniFaces (مثل GenericEnumConverter) غير مسجلين في JSF ولن يعملوا.تتم مناقشة سبب ذلك هنا و هنا.أساسا وفقا ل JSF 2.0 المواصفات (قسم 11.5.1 متطلبات مسح الفئات للتعليقات التوضيحية)، الحروب فقط WEB-INF/lib يتم فحص الدليل.

لذلك سؤالي هو: كيف يمكنني تضمين OmniFaces في طلبي؟?

بما في ذلك مرتين (في EAR/lib والحروب WEB-INF/lib) من المحتمل أن يعمل ولكنه يشعر بالخرق.لقد قمت بتجربتها منذ فترة مع RichFaces 4.3.5 (نفس المشكلة) والتي لم تنجح ولكنها أدت إلى IllegalArgumentException: duplicate key: class javax.faces.convert.ByteConverter.

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

المحلول

OmniFaces هي مكتبة أدوات مساعدة لـ JSF تعتمد على واجهات برمجة تطبيقات JSF وEL وServlet، والتي عادة ما تكون متاحة فقط داخل WAR، وليس EAR.علاوة على ذلك، ليس من المفترض أن يكون لدى EJBs (خدمات الأعمال بشكل عام) أي تبعيات على واجهات برمجة التطبيقات الأمامية المحددة مثل JSF، وEL، وServlet APIs.سيجعلها غير قابلة لإعادة الاستخدام على الواجهات الأمامية الأخرى مثل JAX-RS وSpring MVC وما إلى ذلك.

أنت بحاجة إلى وضع مكتبات JSF المساعدة والمكونات مثل OmniFaces وPrimFaces في WAR، وليس في EAR.أنظر أيضا تثبيت قسم صفحة Omnifaces الرئيسية:

تم تصميم OmniFaces كمكتبة WAR (مكتبة أجزاء الويب) وبالتالي لا يمكن وضعها في مكان آخر في مسار فئة وقت تشغيل تطبيق الويب خارج مسار WAR الخاص /WEB-INF/lib, ، مثل EAR /lib أو حتى الخادم أو JRE الخاص /lib.عندما يكون ملف OmniFaces JAR في غير مكانه بهذه الطريقة، فلن يتمكن تطبيق الويب من العثور على فئات JSF/CDI المشروحة المجمعة في OmniFaces ورمي الاستثناءات المتعلقة بهذا أثناء النشر أو وقت التشغيل.لحلها، أعد OmniFaces إلى WAR /WEB-INF/lib.

أنظر أيضا:

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