2017-03-19 2 views
1

Je travaille sur Aurora Store, j'ai créé un contrôleur de rafraîchissement pour actualiser une zone.WCS Ajax rafraîchir en utilisant Dojo et le contrôleur

Mais le contrôleur ne fonctionne que la première fois, c'est-à-dire quand la page est chargée pour la première fois et que le bouton est cliqué sur le contrôleur de rafraîchissement, la zone est rafraîchie.

Code

pour référence:

Exemple d'application pour rafraîchir une partie d'une page avec des détails sur la personne d'un simple clic

1. défini par le contexte dans un fichier JavaScript. Le contexte traitera et permettra de rafraîchir la zone, l'URL du Set contrôleur dans un fichier jsp

wc.render.declareContext("MyAreaContext",null,""), 
    SBControllersDeclarationJS.setControllerURL('CustomController','<c:out value="${AjaxCustomInformationViewURL}"/>'); 

2. Mettre cette div avant la zone qui doit être rafraîchi

<div dojotype="wc.widget.RefreshArea" widgetid="RefreshAreaDisplay" 
       controllerid="CustomController" id="RefreshCustomAreaDisplay" role="wairole:region" 
       waistate:live="polite" waistate:atomic="false" waistate:relevant="all"> 

dans ce div Voici le contenu

${person.email1} 

     ${person.firstName} ${person.lastName} 

     ${person.addressLine[0]} 

     ${person.country} 
        </div> 

3. événement (clic bouton) qui déclenche la mise à jour C ONTEXTE

<a role="button" 
         id="WC_Custom_links_1" tabindex="0" 
         href="JavaScript:CustomHelper.updateInfo();  wc.render.updateContext('CustomAreaContext');"> 

Fonction « updateInfo » fonctionne bien chaque fois que vous cliquez dessus, mais l'actualisation ne fonctionne pas après la première fois.

4. Struts-config-ext.xml

<forward className="com.ibm.commerce.struts.ECActionForward" name="CurrentCustomView/47401" path="/ShoppingArea/CustomInfo.jsp"/> 

construction 5.URL

<wcf:url var="AjaxCustomInformationViewURL" value="CurrentCustomView" type="Ajax"> 
        <wcf:param name="langId" value="${langId}" />       
        <wcf:param name="storeId" value="${WCParam.storeId}" /> 
       <wcf:param name="catalogId" value="${WCParam.catalogId}" /> 
       <wcf:param name="orderId" value="${currentOrderId}" /> 
      </wcf:url> 

6. définition du contrôleur: URL à appeler, il a gardé ici null car cela sera mis à jour dans le client jsp

  <script type="text/javascript"> 
       wc.render.declareRefreshController({ 
       id: "CustomController", 
       renderContext: wc.render.getContextById("CustomAreaContext"), 
       url: "", 
      formId: "" 
      ,modelChangedHandler: function(message, widget) { 

       var controller = this; 
       var renderContext = this.renderContext; 
       widget.refresh(renderContext.properties); 
       cursor_clear(); 


      } 
      ,renderContextChangedHandler: function(message, widget) { 

      var controller = this; 
      var renderContext = this.renderContext; 
      widget.refresh(renderContext.properties); 
      cursor_clear(); 

     } 
     ,postRefreshHandler: function(widget) { 
     var controller = this; 
     var renderContext = this.renderContext; 
     cursor_clear(); 

     } 
     }); 
    </script> 

7. CustomInfo.jsp

<wcf:rest var="person" url="store/{storeId}/person/@self" 
      scope="request"> 
      <wcf:var name="storeId" value="${WCParam.storeId}" encode="true" /> 
</wcf:rest> 

     ${person.email1} 

     ${person.firstName} ${person.lastName} 

Répondre

0

Problème résolu. Je analysais le widget avec un mauvais nom.