2009-08-13 5 views
0

Je suis confronté à un problème avec Icefaces et c'est javascript bridge. Je ne sais pas quelles sont les modifications apportées par ce pont après avoir fait des changements dans le côté serveur.Icefaces et javascript bridge

Par exemple: Je glace: composant panelPopup dans ma page avec l'attribut visible = "# {bean.customPopUp}". Si j'ai changé le "bean.customPopUp" pour être "true" la popup est affichée correctement, mais ce que je dois savoir: ce qui s'est passé dans le client, en d'autres termes, j'ai besoin de savoir si la popup est affiché J'ai besoin de faire un peu de traitement de client en utilisant javascript

+0

Je ne sais pas si j'ai bien compris votre question mais si vous voulez savoir si ICEfaces nécessite JavaScript, alors la réponse est définitivement Oui. Ces "actualisations partielles" nécessitent du JavaScript côté client pour modifier le DOM. De toute façon, pouvez-vous préciser plus précisément ce que vous devez savoir sur le pont JavaScript d'ICEfaces? –

+0

Merci et désolé pour mon mauvais anglais. J'utilise ice: panelPopup, j'ai besoin de savoir quand cette popup est affichée. J'ai besoin de n'importe quel indicateur ou indicateur pour me le dire, parce que j'ai besoin de faire un peu de JS après le popup affiché. J'utilise Ice.onSendReceive mais il a été déclenché avant que le popup ne s'affiche. J'ai essayé: Ice.onSendReceive ('document: corps', window.setTimeout ("detectPopUp()", 1000); }); detectPopUp(): pour obtenir le popup en utilisant son identifiant. Mais je pense que ce n'est pas un moyen parfait et ne fonctionne pas à chaque fois. J'ai essayé JavascriptContext.addJavascriptCall (FacesContext.getCurrentInstance(), "detectPopUp()"); dans mon haricot mais pas travaillé. Alors quoi faire – Saeed

Répondre

0

J'ai essayé de trouver une solution pour les rappels de niveau composant aussi. Il ne semble pas y avoir de bonne solution à ce problème. J'ai recouru à l'initialisation d'une fonction d'interrogation récursive en Javascript qui gère ma tâche après avoir détecté une mise à jour de mon composant. Mon bean backing démarre le poller() et il s'exécute toutes les 500ms jusqu'à la mise à jour du composant.

var pollingCount = 0; 
var previousValue; 

function poller() { 
    // Kill poller after 30 seconds 
    if (pollingCount >= 60) { 
     pollingCount = 0; 
     return; 
    } 

    var currentValue = document.getElementById('myInputElement').value; 
    if (previousValue != currentValue) { 
     previousValue = currentValue; 
     pollingCount = 0; 
     myFunction(); 
    } 
    else { 
     pollingCount++; 
     setTimeout('poller()', 500); 
    } 
} 

Mon backing bean:

updateDataModel(); // Causes 'myInputElement' component to update 

FacesContext fc = FacesContext.getCurrentInstance(); 
JavascriptContext.addJavascriptCall(fc, "poller();"); 

Je n'aime pas cette solution beaucoup, mais il ne semble pas y avoir de grandes réponses à ce moment.