2013-02-22 40 views
3

當我沒有使用Ajax時,那麼一切都很好,並使用相同的代碼。但是在這裏使用ajax對於同一個公共字符串得到了null值。String execute()throws Exception {String strAction = cartItemForm.getAction();/*我在這裏使用ajax調用geting null,但簡單stuts2獲取行動值,我在<s:hidden name="action" value="Add" id="action" />它意味着獲得添加* /返回「成功」; }如何使用Ajax和Struts2將表單數據發送到ActionSupport

這是JSP

<script type="text/javascript"> 
    function submitAjax() 
    { 
    JSONobj = {cartItem:{ 
    description : $("description").val(), 
    price :$("price").val(), 
    action : $("action").val(), 
    quantity :$("quantity").val(), 
    } }; 
    JSONstr = JSON.stringify(JSONobj); 

    jQuery.ajax(
    { 
     type: 'POST', 
     url: 'Cart.action', 
     data:JSONstr, 
     dataType: 'json', 
     async: false , 
     contentType: 'application/json; charset=utf-8', 
     success: function(){window.alert("done");} 
    }); 
} 

</script> 
<s:form> 
    <s:hidden name="modelNo"  value="%{#attr.productId}"     /> 
    <s:hidden name="description" value="%{#attr.productName}" id="description" /> 
    <s:hidden name="price"  value="%{#attr.listprice}" id="price"  /> 
    <s:hidden name="action"  value="Add"     id="action"  /> 

    <s:submit value="add to cart" cssClass="submit_button" theme="simple"  /> 
</s:form> 

這是struts.xml的

<action name="Cart" class="struts.cart.action.CartAction"> 
    <result type="json"/> 
</action> 

這裏是我的Action類

public class CartAction extends ActionSupport 
         implements ModelDriven, Preparable, ServletRequestAware { 
    private static final long serialVersionUID = -3670063011948002290L; 
public static final String ADD = "Add"; 
public static final String DELETE = "Delete"; 
public static final String UPDATE = "Update"; 
public static final String CART_SESSION = "Cart"; 

    private HttpServletRequest request; 
    private CartItemForm  cartItemForm; 

    public String execute() throws Exception { 
     String strAction = cartItemForm.getAction();//i am geting null here 
     return "success"; 
    } 

    public Object getModel() { 
     // TODO Auto-generated method stub 
     System.out.println("Cart getModel "+cartItemForm); 
     return cartItemForm; 
    } 

    public void prepare() throws Exception { 
     // TODO Auto-generated method stub 
     System.out.println("Cart prepare "+cartItemForm); 
     cartItemForm=new CartItemForm(); 
    } 

    public void setServletRequest(HttpServletRequest httpServletRequest) { 
     // TODO Auto-generated method stub 
     request = httpServletRequest; 
    } 
} 
+0

考慮修復您的方法模板,或者至少刪除無用的註釋。 – 2013-02-22 12:25:45

回答

2

我不知道,如果我有明白你的問題,這樣做非常簡單。這裏是jQuery的一個可能的解決方案:

<s:form id="myForm"> 
    <s:hidden name="modelNo" value="%{#attr.productId}"></s:hidden> 
    <s:hidden id="description" name="description" value="%{#attr.productName}"></s:hidden> 
    <s:hidden id="price" name="price" value="%{#attr.listprice}"></s:hidden> 
    <s:hidden id="action" name="action" value="Add"></s:hidden> 
    <s:submit id="#submit" value="add to cart" cssClass="submit_button" theme="simple"></s:submit> 
</s:form> 

<script> 
$("#submit").click(function(){ 
     var formData = $("#myForm").serialize(); //get all data from form 
      //do the POST thingies 
     $.ajax({ 
      type: "POST", 
      url: "url_to_your_struts2_action", 
      cache: false, 
      data: formData, 
      success: onSuccess, 
      error: onError 
     }); 

     return false; 
}); 
</script> 
+0

我仍然geting null值請任何一個chek它和crrect我 – 2013-02-22 13:24:18

+0

如何在ActionSuport類中獲取formData值。 @ aiwo99 – 2013-02-23 09:57:14

+0

@ user2098768如果你有'param'攔截器,你可以使用參數和getter的名字很容易地在你的動作類中定義變量,設置器 – Jaiwo99 2013-02-23 12:23:01

相關問題