2013-02-26 10 views
5

Eylemimde ServletRequest örneğini nasıl alabilirim?Struts2: ActionSupport'ta ServletRequest örneğini nasıl alabilirim

ServletRequestAware uyguladım ancak eylemde istek nesnesi alamıyorum.

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> 

Ben Ajax/JavaScript kullanarak çağrı yapıyorum:

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

JSON nesnesi:

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

Eylem:

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; 
    } 

} 

cevap

5

bu

HttpServletRequest request = ServletActionContext.getRequest() ; 
+0

atar. –

4
  1. deneyin Neden sen ihtiyaç servlet isteği? Bu gerekli nadirdir.
  2. eylem içine setleri önleme kaldırıldı çünkü ServletRequestAware çalışmıyor nedeni
  3. : Bir eylemin yapılandırmasında herhangi önleyicilerin ayarladığınızda
<action name="Cart" class="struts.cart.action.CartAction"> 
    <interceptor-ref name="json"> 
    <param name="contentType">application/json</param> 
    </interceptor-ref> 
    <result type="json"/> 
</action> 

Eğer tüm önleyicilerin ayarlamalısınız . İşte

Eğer ServletRequestAware eylemler için istek setleri "ServletConfig" dahil tüm varsayılan önleyicilerin, kaldırdık ve sadece json önleme çalıştırıyorsunuz.

0

Sen kolayca hem nesneyi alabilirsiniz yöntemini gerçekleştirmek zorunda bu iç .. bu şekilde

public class TestAjaxAction extends AJAXActionSupport { 

// AjaxActionSupport yerine ActionSupport kullanabilirsiniz. Bu ServletRequestAware` tercih edilir `uygularken, işe yararken

public void gerçekleştirmek (HttpServletRequest isteği HttpServletResponse yanıt) AJAXActionException {

+1

'AJAXActionSupport' S2 çekirdeğine ait değil. En azından bir FQN ver. –

İlgili konular