3 votes

Comment envoyer des données de formulaire à ActionSupport en utilisant Ajax et Struts2

Quand je n'utilise pas Ajax, tout va bien avec le même code. Mais en utilisant Ajax, j'obtiens une valeur nulle pour le même public String execute() throws Exception { String strAction = cartItemForm.getAction() ; /*J'obtiens une valeur nulle en utilisant l'appel Ajax mais le simple Stuts2 obtient la valeur de l'action que j'ai dans le code. <s:hidden name="action" value="Add" id="action" /> cela signifie obtenir un ajout */ return "success" ; }

c'est 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>

Voici le fichier struts.xml

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

Voici MA classe d'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;
    }
}

2voto

Jaiwo99 Points 6329

Je ne suis pas sûr d'avoir compris votre question, mais c'est très simple à faire. Voici une solution possible avec 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>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X