2013-05-10 2 views
5

मैं स्ट्रूट्स का उपयोग कर रहा हूं 2. एक इंटरसेप्टर का उपयोग करके, मैं प्रत्येक पृष्ठ निष्पादन की शुरुआत में डेटाबेस कनेक्शन बना देता हूं।स्ट्रैट्स 2 इंटरसेप्टर जो पेज निष्पादित करने के बाद चलता है?

तो उदाहरण के लिए, यदि कोई उपयोगकर्ता "myAction.do" पर जाता है, तो यह डेटाबेस कनेक्शन बनाएगा और फिर myAction.do विधि पर कॉल करेगा।

जो मैं अभी खोज रहा हूं वह पृष्ठ निष्पादन के बाद स्वचालित रूप से एक विधि को कॉल करने के लिए एक इंटरसेप्टर या कोई अन्य तरीका है, जो डेटाबेस कनेक्शन को बंद कर देगा।

क्या यह संभव है?

उत्तर

4

इंटरसेप्टर में आप प्री प्रोसेसिंग और पोस्ट प्रोसेसिंग लॉजिक लिख सकते हैं।

पूर्व प्रसंस्करण तर्क क्रिया निष्पादन से पहले निष्पादित होगा और कार्रवाई निष्पादन के बाद पोस्ट प्रोसेसिंग तर्क निष्पादित करेगा।

स्ट्रूट 2 इंटरसेप्टर्स का उपयोग कर अनुरोध को नियंत्रित करने के बहुत शक्तिशाली तंत्र प्रदान करता है। इंटरसेप्टर अनुरोध प्रसंस्करण के अधिकांश के लिए ज़िम्मेदार हैं। क्रियान्वयन के बाद उन्हें नियंत्रक द्वारा से पहले बुलाया जाता है, इस प्रकार वे नियंत्रक और कार्रवाई के बीच बैठते हैं। इंटरसेप्टर ऐसे लॉगिंग, मान्यता, फ़ाइल अपलोड, डबल-प्रस्तुत गार्ड आदि

तुम जो भी invocation.invoke(); कि कार्यान्वित कार्रवाई

SEE HERE FOR EXAMPLE

+0

मैं समझता हूँ कि 'अवरोधन()' पूर्व प्रसंस्करण कहा जाता है, लेकिन क्या विधि पोस्ट प्रोसेसिंग कहा जाता है? क्या हर अनुरोध के लिए हमेशा नष्ट हो रहा है, या सिर्फ एक बार में नष्ट हो रहा है? –

+0

देखें कि मैंने अपना उत्तर – PSR

+0

बहुत बढ़िया अपडेट किया है, बहुत बहुत धन्यवाद। जैसे ही यह मुझे देता है मैं आपके उत्तर को स्वीकार करूंगा। एक और सवाल, क्या होगा यदि मैं कार्रवाई की एक कस्टम विधि को चलाने के लिए चाहता था, उदाहरण के लिए यदि मैं 'invAction.setSomeValue()' को 'invocation.invoke()' से पहले चलाने के लिए चाहता हूं, तो क्या आप जानते हैं कि यह कैसे किया जा सकता है? –

1

पूरी तरह से http://blog.agilelogicsolutions.com/2011/05/struts-2-interceptors-before-between.html में वर्णित के बाद निष्पादित करेंगे के बाद लिखेंगे के रूप में कार्य करता है

आप इंटरसेप्टर हो सकते हैं:

  1. कार्रवाई
  2. पहले कार्रवाई के बीच
  3. और परिणाम
  4. के बाद दृश्य गाया

के रूप में साइट यहाँ में वर्णित कोड नमूने हैं

इंटरसेप्टर

पहले
public class BeforeInterceptor extends AbstractInterceptor { 
    @Override 
    public String intercept(ActionInvocation invocation) throws Exception { 
     // do something before invoke 
     doSomeLogic(); 
     // invocation continue  
     return invocation.invoke(); 
    } 
    } 
} 
कार्रवाई और परिणाम के बीच

public class BetweenActionAndResultInterceptor extends AbstractInterceptor { 
    @Override 
    public String intercept(ActionInvocation invocation) throws Exception { 
     // Register a PreResultListener and implement the beforeReslut method 
     invocation.addPreResultListener(new PreResultListener() { 
     @Override 
     public void beforeResult(ActionInvocation invocation, String resultCode) { 
      Object o = invocation.getAction(); 
      try{ 
      if(o instanceof MyAction){ 
       ((MyAction) o).someLogicAfterActionBeforeView(); 
      } 
      //or someLogicBeforeView() 
      }catch(Exception e){ 
      invocation.setResultCode("error"); 
      } 
     } 
     }); 

     // Invocation Continue 
     return invocation.invoke(); 
    } 
    } 
} 

गाया के बाद देखें

public class AfterViewRenderedInterceptor extends AbstractInterceptor { 
    @Override 
    public String intercept(ActionInvocation invocation) throws Exception { 
     // do something before invoke 
     try{ 
     // invocation continue  
     return invocation.invoke(); 
     }catch(Exception e){ 
     // You cannot change the result code here though, such as: 
     // return "error"; 
     // This line will not work because view is already generated 
     doSomeLogicAfterView(); 
     } 
    } 
    } 
} 
संबंधित मुद्दे