2013-04-20 8 views
6

जेएसएफ-अनुप्रयोग सत्र समाप्त होने पर ViewExpiredException एस फेंक सकता है। आपके सिस्टम पर मेहमान होने पर यह घटना काफी आम होगी। वजह आवेदन इस प्रकार, मेहमान के लिए कोई परेशानी के बिना इस घटना को संभाल लेंगे:त्रुटि-पृष्ठ द्वारा प्रबंधित ViewExpiredException, अभी भी लॉग

<error-page> 
    <exception-type>javax.faces.application.ViewExpiredException</exception-type> 
    <location>/expired</location> 
</error-page> 

एक अतिथि की तिथि निकल चुकी सत्र पर एक अनुरोध भेजने के लिए कोशिश करता है, वह /expired पुनः निर्देशित किया जाएगा। चूंकि मैं इस Exception को उल्लेख करने की समस्या के रूप में नहीं मानता, इसलिए मैं अपने अनुप्रयोगकर्ता के लॉग में स्टैकट्रैक लिखना बंद करना चाहता हूं।

मैं यह कैसे पूरा कर सकते हैं?

उत्तर

7

मूल रूप से 2 विकल्प हैं जो प्रत्येक एक ही समाधान के लिए उबालते हैं: servlet filter या जेएसएफ exception handler का उपयोग करके स्वयं को त्रुटि पृष्ठ पर पकड़ें, दबाएं और नेविगेट करें। इस तरह अपवाद servletcontainer तक नहीं पहुंच जाएगा जो तब इसे स्वचालित रूप से संभाल और लॉग करेगा।

बशर्ते कि त्रुटि पृष्ठ वास्तव में (यह अर्थात्, JSF ajax अनुरोध के साथ काम नहीं करेगा जब तक आप एक कस्टम JSF ExceptionHandler है) आप के लिए काम करता है, तो एक सर्वलेट फिल्टर URL पैटर्न पर मैप किया JSF अनुरोध जो करता है मिलान इसके doFilter() विधि में निम्नलिखित पर्याप्त होना चाहिए:

try { 
    chain.doFilter(request, response); 
} catch (ServletException e) { 
    if (e.getRootCause() instanceof ViewExpiredException) { 
     request.getRequestDispatcher("/expired").forward(request, response); 
    } else { 
     throw e; 
    } 
} 

आप JSF ajax अनुरोध को कवर करने के साथ ही चाहते हैं, तो आप एक JSF अपवाद संचालक के आसपास नहीं जा सकते।

: निम्न संबंधित उत्तर देने के लिए सिर कुछ ठोस उदाहरण देखने के लिए
संबंधित मुद्दे