2010-01-10 5 views
1

Je construis un module Drupal qui intègre l'applet FTP Java "FileCatalyst" avec un formulaire Drupal standard. J'implémente un hook pour soumettre le formulaire quand un transfert de fichier se termine. Actuellement, j'interroge l'applet avec un appel setTimeout(), mais cette méthode peut manquer des changements d'état s'ils se produisent trop rapidement.Comment utiliser java.util.Observable de Javascript?

Cependant, l'objet FileCatalyst hérite de java.util.Observable - il est donc apparemment possible d'enregistrer un observateur pour l'applet et d'obtenir des notifications de changements d'état. Je voudrais savoir comment mettre en œuvre cela. Puis-je utiliser la fonction document.FileCatalyst.addObserver (obj) de Javascript pour obtenir ces changements d'état envoyés à un objet Javascript? Que dois-je passer à addObserver? Comment puis-je construire l'observateur? Quelles méthodes l'observateur doit-il mettre en œuvre pour recevoir des notifications de changement d'état?

Répondre

0

Je ne peux pas répondre complètement à votre question, mais j'ai lu qu'il y a un côté sombre à java.util.Observable (voir Head First Design Patterns). A savoir, l'observable doit être travaillé dans la hiérarchie de classe. Le PropertyListener de java.beans conviendrait-il à votre scénario d'utilisation? Si c'est le cas, il y a beaucoup d'exemple de code qui montre comment configurer les PropertyListeners pour un simple JavaBean.

0

Chaque applet Java est également un objet Javascript offrant les mêmes méthodes que l'objet Java. Ainsi, vous pouvez invoquer addObserver() à partir de Javascript. L'objet que vous passez en paramètre doit être un objet Javascript offrant les mêmes méthodes que celles spécifiées par le type Observer (en supposant que addObserver() prenne un seul paramètre de type Observer).

0

Vous devez utiliser les URL de redirection fournies dans fcupload.js. Par exemple:

var callurlaftertransfer = "javascript: submitForm()";

Ensuite, vous auriez la fonction submitForm() faire un appel comme document.myform.submit();

Espérons que ça aide!

Chris

+0

C'est une bonne réponse et répond parfaitement au problème d'interrogation. (Je ne sais pas pourquoi je ne l'ai pas fait de cette façon en premier lieu!) La plus grande partie de ma question est liée à une spécification que l'on m'a donné à mettre en œuvre. Le client a déjà implémenté une page avec un formulaire, plus l'applet FileCatalyst sous le formulaire. Ils souhaitent que le formulaire soit soumis lorsque les fichiers sont téléchargés correctement et ils souhaitent que la liste de fichiers soit envoyée avec le contenu du formulaire. Malheureusement, la méthode callurlaftertransfer n'inclut pas ces données. (voir le commentaire suivant ...) –

+0

Il existe un autre paramètre FileCatalyst, "postURL" qui inclut la liste des fichiers téléchargés, mais qui nécessite un rechargement de la page et ignore la soumission du formulaire. J'espérais obtenir la liste des fichiers téléchargés avant le rechargement de la page, donc il pourrait être envoyé avec le formulaire. (Incorporer l'applet dans un iframe est une solution hackish que j'avais envisagée.) Finalement, j'ai convaincu le client de changer la spécification. À savoir, affichez l'applet en elle-même en tant qu'étape 1, capturez les fichiers téléchargés à partir de postURL, puis affichez le formulaire en tant qu'étape 2, qui affichera ensuite les informations postURL dans un champ masqué. –

Questions connexes