3

Ajaxを使用していないときは、同じコードですべてうまくいきます。しかし、ここでajaxを使用すると、同じパブリック文字列に対してnull値が取得されますexecute()は例外をスローします{String strAction = cartItemForm.getAction(); / *ここではajax呼び出しを使用してnullを取得していますが、単純なstuts2がアクション値を<s:hidden name="action" value="Add" id="action" />取得することは、追加を取得することを意味します* / return "success"; }

これは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>

これが私のアクションクラスです

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

1 に答える 1

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>
于 2013-02-22T10:02:04.387 に答える