2012-11-12 4 views
1

J'essaie d'intégrer l'éditeur autonome de Drools-Guvnor dans mon application spring-webflow-jsf-richfaces. J'affiche le guvnor-editor dans un iframe (à l'intérieur d'un richfaces-modalpanel). Selon la documentation, guvnor expose un objet javascript ainsi que des fonctions de rappel pour l'application parent de communiquerFonctions de rappel JavaScript définies dans Iframe

var guvnorEditorObject = { 
    getDRL: function (callbackFunction), 
    getBRL: function (callbackFunction), 
    registerAfterSaveAndCloseButtonCallbackFunction: function (callbackFunction), 
    registerAfterCancelButtonCallbackFunction: function (callbackFunction), 
    getAssetsUUIDs: function() 
} 

Maintenant, ma question est de savoir comment puis-je enregistrer ces fonctions de rappel à l'intérieur ma page JSF? Par exemple, je souhaite fermer la fenêtre du panneau modal si l'utilisateur clique sur le bouton de fermeture. Un exemple de code serait vraiment utile pour moi.

Répondre

1

J'ai réussi à résoudre ce problème en utilisant la fonction javascript setTimeout.

Le problème de base était que guvnorEditorObject a été créé dynamiquement et n'est donc pas disponible lors du chargement immédiat de l'iframe.

Voici le code appelé au chargement de iframe.

 function register() { 
     var guvnorEditorObject = window.document.getElementById('myIframe').contentWindow.guvnorEditorObject; 
     if(guvnorEditorObject){ 
      //guvnorEditorObject.getDRL(function(drl){alert('drl: '+drl);}) 
      //guvnorEditorObject.getBRL(function(brl){alert('brl: '+brl);}) 
      guvnorEditorObject.registerAfterSaveAndCloseButtonCallbackFunction(function(){guvnorEditorObject.getDRL(function(drl){alert('drl: '+drl);window.close();})}); 
      guvnorEditorObject.registerAfterCancelButtonCallbackFunction(function(){alert('Cancel button clicked');});    
      //alert(guvnorEditorObject.getAssetsUUIDs());  
     }else{ 
      setTimeout(register,250); 
     } 
    } 
Questions connexes