2013-02-26 19 views
5

में ServletRequest उदाहरण कैसे प्राप्त करूं? मुझे अपनी क्रिया में ServletRequest उदाहरण कैसे प्राप्त होगा?Struts2: मैं ActionSupport

मैंने ServletRequestAware लागू किया लेकिन मैं कार्रवाई में अनुरोध वस्तु प्राप्त करने में सक्षम नहीं हूं।

struts.xml

<package name="default" extends="struts-default,json-default"> 
    <action name="Cart" 
    class="struts.cart.action.CartAction"> 
     <interceptor-ref name="json"> 
      <param name="contentType">application/json</param> 
     </interceptor-ref> 
     <result type="json"/> 
    </action> 
</package> 

मैं कॉल अजाक्स/जावास्क्रिप्ट का उपयोग कर रही हूँ:

req.onreadystatechange = onReadyState; 
req.open(POST, Cart.action, false); 
req.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 
req.send(JSONstr); 

JSON ऑब्जेक्ट:

var data = { cartItem: { 
    modelNo: $('#modelNo').val(), 
    description: $('#description').val(), 
    price: $('#price').val(), 
    action: $('#action').val(), 
    quantity: $('#quantity').val() 
}}; 
JSONstr = JSON.stringify(data); 

कार्रवाई:

public class CartAction extends ActionSupport implements ServletRequestAware { 

    private HttpServletRequest request; 
    private Map cartItem = new HashMap(); 

    public String execute() throws Exception { 
     System.out.println("request " + cartItem); // getting here cartitem 
     System.out.println("request " + request); // request null 
    } 

    public void setServletRequest(HttpServletRequest httpServletRequest) { 
     this.request = httpServletRequest; 
    } 

    public Map getCartItem() { 
     return cartItem; 
    } 

    public void setCartItem(Map cartItem) { 
     this.cartItem = cartItem; 
    } 

} 

उत्तर

5

इस

HttpServletRequest request = ServletActionContext.getRequest() ; 
+0

हालांकि यह, काम करता है को लागू करने 'ServletRequestAware' पसंद किया जाता है। –

4
  1. कोशिश क्यों आप जरूरत सर्वलेट अनुरोध? यह दुर्लभ है इसकी आवश्यकता है।
  2. क्योंकि आप इंटरसेप्टर कि यह कार्रवाई में सेट हटाया कारण ServletRequestAware काम नहीं कर रहा है:
<action name="Cart" class="struts.cart.action.CartAction"> 
    <interceptor-ref name="json"> 
    <param name="contentType">application/json</param> 
    </interceptor-ref> 
    <result type="json"/> 
</action> 

आप एक कार्रवाई के कॉन्फ़िगरेशन में किसी भी इंटरसेप्टर सेट जब आप सभी इंटरसेप्टर सेट करना होगा ।

यहाँ आप हटा दिया है "servletConfig" जो ServletRequestAware कार्यों के लिए अनुरोध सेट सहित सभी डिफ़ॉल्ट इंटरसेप्टर, और केवलjson इंटरसेप्टर चल रहे हैं।

0

आप इस आप विधि जहां आप आसानी से दोनों वस्तु प्राप्त कर सकते हैं प्रदर्शन करते हैं अंदर इस तरह से AjaxActionSupport बजाय ActionSupport उपयोग कर सकते हैं ..

public class TestAjaxAction extends AJAXActionSupport { 

//।

सार्वजनिक शून्य प्रदर्शन (HttpServletRequest अनुरोध, HttpServletResponse प्रतिक्रिया) फेंकता AJAXActionException {

+1

'AJAXActionSupport' S2 कोर से संबंधित नहीं है। कम से कम एक एफक्यूएन दें। –

संबंधित मुद्दे