2013-02-26 7 views
5

Come ottengo l'istanza ServletRequest nella mia azione?Struts2: Come ottengo l'istanza di ServletRequest in ActionSupport

Ho implementato ServletRequestAware ma non sono in grado di ottenere oggetto richiesta nell'azione.

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> 

Sto facendo chiamata usando Ajax/JavaScript:

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

JSON oggetto:

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

Azione:

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

} 

risposta

5

provare questo

HttpServletRequest request = ServletActionContext.getRequest() ; 
+0

Anche se questo funziona, l'implementazione 'ServletRequestAware' è preferito. –

4
  1. Perché ti necessità la richiesta servlet? È raro che sia richiesto.
  2. Il motivo ServletRequestAware non funziona è perché è stato rimosso l'intercettore che mette in azione:
<action name="Cart" class="struts.cart.action.CartAction"> 
    <interceptor-ref name="json"> 
    <param name="contentType">application/json</param> 
    </interceptor-ref> 
    <result type="json"/> 
</action> 

Quando si imposta eventuali intercettori nella configurazione di un'azione è necessario impostare tutti intercettori .

Qui hai rimosso tutti gli intercettori di default, tra cui "ServletConfig" che imposta la richiesta di ServletRequestAware azioni, e sono in esecuzione solo il json intercettore.

0

È possibile utilizzare AjaxActionSupport invece ActionSupport in questo modo ..

public class TestAjaxAction extends AJAXActionSupport { 

// all'interno di questo avete metodo in cui è possibile ottenere facilmente sia oggetto eseguire.

eseguire public void (richiesta HttpServletRequest, HttpServletResponse risposta) getta AJAXActionException {

+1

'AJAXActionSupport' non appartiene al core S2. Almeno dai un FQN. –

Problemi correlati