2013-02-26 11 views
5

アクションにServletRequestインスタンスを取得するにはどうすればよいですか?Struts2:ActionSupportでServletRequestインスタンスを取得するには

私はServletRequestAwareを実装しましたが、このアクションでリクエストオブジェクトを取得できません。

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

} 
私はアヤックス/ JavaScriptを使用して通話作っています

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> 

答えて

5

この

HttpServletRequest request = ServletActionContext.getRequest() ; 
+0

をスロー。 –

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> 

アクションの設定でいかなるインターセプタを設定するときは、すべてインターセプタを設定する必要があります。 。ここで

あなたはServletRequestAwareアクションの要求を設定します「のServletConfig」を含むすべてのデフォルトインターセプタを、削除した、とのみjsonインターセプタを実行しています。

0

あなたは、あなたが簡単に両方のオブジェクトを取得することができる方法を実行する必要があり、この内...このように

public class TestAjaxAction extends AJAXActionSupport { 

//をAjaxActionSupport代わりActionSupportを使用することができます。これは機能するが

公共ボイド(HttpServletRequestのリクエスト、HttpServletResponseの 応答)を行うがServletRequestAware`が好ましい `実装、AJAXActionException {

+1

'AJAXActionSupport'はS2コアに属していません。少なくともFQNを与えてください。 –