سؤال

إذا كان الكود الخاص بي يطرح استثناءً، في بعض الأحيان - وليس في كل مرة - يعرض jsf صفحة فارغة.أنا أستخدم الجوانب للتخطيط.تم الإبلاغ عن خطأ مماثل في هذا مشاركة منتدى الشمس, ، ولكن من دون إجابات.أي شخص آخر لديه نفس المشكلة، أو لديك حل؟;)

نظرا لبعض الطلبات.هنا اتبع المزيد من البيانات:

web.xml

 <error-page>
        <exception-type>com.company.ApplicationResourceException</exception-type>
        <location>/error.faces</location>
 </error-page>

ويتم طباعة المكدس المرتبط بـ jsf بعد الاستثناء الحقيقي:

####<Sep 23, 2008 5:42:55 PM GMT-03:00> <Error> <HTTP> <comp141> <AdminServer> <[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1222202575662> <BEA-101107> <[weblogic.servlet.internal.WebAppServletContext@6d46b9 - appName: 'ControlPanelEAR', name: 'ControlPanelWeb', context-path: '/Web'] Problem occurred while serving the error page.
javax.servlet.ServletException: viewId:/error.xhtml - View /error.xhtml could not be restored.
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:249)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
    at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:525)
    at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:261)
    at weblogic.servlet.internal.ForwardAction.run(ForwardAction.java:22)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(Unknown Source)
    at weblogic.servlet.internal.ErrorManager.handleException(ErrorManager.java:144)
    at weblogic.servlet.internal.WebAppServletContext.handleThrowableFromInvocation(WebAppServletContext.java:2201)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2053)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1366)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)
javax.faces.application.ViewExpiredException: viewId:/error.xhtml - View /error.xhtml could not be restored.
    at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:180)
    at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:248)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)

أنا أستخدم نسخة jsf Mojarra 1.2_09, richfaces 3.2.1.GA و facelets 1.1.13.

نأمل بعض المساعدة :(

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

المحلول

أعتقد أن هذا يعتمد إلى حد كبير على تنفيذ JSF الخاص بك.لقد سمعت أن البعض سوف يعرض شاشات فارغة.

الذي كنا نستخدمه سوف يلقي خطأ 500 مع تتبع المكدس.لن تعمل أزرار المهلة الأخرى دون أي خطأ للمستخدم.كان هذا كله خلال مرحلة التطوير لدينا.

لكن أفضل نصيحة يمكنني تقديمها لك هي اكتشاف الاستثناءات وتسجيلها في سجل الأخطاء حتى يكون لديك تتبع المكدس لتصحيح الأخطاء لاحقًا.بالنسبة للرسائل التي لا يمكننا فعل أي شيء حيالها، مثل فشل الواجهة الخلفية، فإننا نقوم فقط بإضافة رسالة قاتلة إلى FacesContext التي يتم عرضها على الشاشة وتسجيل تتبع المكدس.

نصائح أخرى

لقد أصلحت مشكلة مماثلة في جهازي error.jsp الصفحة اليوم.لن يكون هذا هو نفس ما لديك تمامًا، ولكنه قد يوجه شخصًا ما في الاتجاه الصحيح إذا كان يواجه مشكلة مماثلة.يبدو أن مشكلتي تأتي من مصدرين مختلفين.

لأول مرة message لم يتم تعيين خاصية الاستثناء في بعض السيرفلتس التي كانت تطرح استثناءات تم اكتشافها بواسطة صفحة الخطأ.كانت servlets تلتقط الاستثناءات وتعيد طرحها باستخدام ServletException(Throwable rootCause) البناء.

ثانيًا، في صفحة الخطأ نفسها، استخدم المؤلف الأصلي كود البرنامج النصي لتحليل الرسالة باستخدام String.split(message, ";"); منذ أن كانت الرسالة null هذا فشل.كنت أحصل على NullPointerException في سجل الأخطاء الخاص بي، بالإضافة إلى الرسالة "حدثت مشكلة أثناء عرض صفحة الخطأ".

تم دمج هذين الأمرين ليعطيني صفحة فارغة على عنوان URL الخاص بـ servlet الذي كان يطرح الاستثناء الأصلي.لقد أصلحت مشكلتي من خلال تقديم رسالة الخطأ الخاصة بي عندما أعيد طرح الاستثناءات في servlets الخاصة بي باستخدام ServletException(String message, Throwable rootCause) منشئ، لذلك لن تكون رسالة الخطأ null.لقد قمت أيضًا بإعادة كتابة error.jsp الصفحة باستخدام EL بدلاً من التعليمات البرمجية النصية، ولكن ذلك لم يكن ضروريًا تمامًا.

بالنسبة للصفحة الفارغة في JSF 2، ضع نقطة توقف فيها ExceptionHandlerWrapper.handle أو فئة تتجاوز هذه الطريقة.في حالتي كان ذلك بسبب التعليمات البرمجية المخصصة التي كانت مقيدة للغاية ولم يتم تسجيل الخطأ.

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