[英]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() ;
<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.