簡體   English   中英

Struts2:如何在ActionSupport中獲取ServletRequest實例

[英]Struts2: How do i get ServletRequest instance in ActionSupport

如何在我的操作中獲取ServletRequest實例?

我實現了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>

我正在使用Ajax / JavaScript進行調用:

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

}   

試試這個

HttpServletRequest request = ServletActionContext.getRequest() ;
  1. 為什么需要 servlet請求? 它很少見。
  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攔截。

您可以用這種方式使用AjaxActionSupport代替ActionSupport。

public class TestAjaxAction extends AJAXActionSupport {

//在這里你有執行方法,你可以輕松地獲得兩個對象。

public void perform(HttpServletRequest request,HttpServletResponse response)拋出AJAXActionException {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM